uses crt; type T = char; tree = ^node; node = record inf: T; brat, son: tree; end; var root: tree; q, data, kuda, shto: T; c, i: integer; b: boolean; procedure dop(var t : tree); begin if t^.brat=nil then begin new(t^.brat); writeln('vvedi element'); readln(t^.brat^.inf); t^.brat^.brat:=nil; t^.brat^.son:=nil; end else dop(t^.brat); end; procedure sozd(var t:tree; var data:char); begin writeln('vvedite element'); readln(data); new(t); t^.inf:=data; t^.brat:=nil; t^.son:=nil; end; procedure destroy(t: tree); var p, pt: tree; begin if t <> nil then begin p := t; while p <> nil do begin destroy(p^.son); pt := p; p := p^.brat; dispose(pt); end; end; end; procedure add(var t : tree; parent: T); begin if t^.inf <> parent then begin if t^.son <> nil then add(t^.son, parent); if t^.brat <> nil then add(t^.brat, parent); end else begin if t^.son = nil then begin new(t^.son); write('enter the element: '); readln(t^.son^.inf); t^.son^.son:=nil; t^.son^.brat:=nil; end else dop(t^.son); end; end; procedure dobavlenie; var parent: T; begin write('enter the parent: '); readln(parent); add(root, parent); end; procedure print(parent: T; t:tree; var i:integer); var j : integer; begin write('':i, '(',parent,'): ', t^.inf); if t^.brat<>nil then begin print(parent, t^.brat,i); end; if t^.son<>nil then begin writeln; print(t^.inf, t^.son,i); end; i:=i+1; end; begin clrscr; writeln(memavail); readln; while not b do begin clrscr; writeln(' 1 - Sozdanie'); writeln(' 2 - Dobavlenie elementa'); writeln(' 3 - Print'); writeln(' 4 - Udalenie'); writeln(' 5 - Exit'); writeln(' 6 - Active'); write('vvedite punkt menu: '); readln(c); case c of 1: sozd(root,data); 2: dobavlenie; 3: begin print(root^.inf, root,i); readln; end; 5: begin b := true; writeln(memavail); destroy(root^.son); dispose(root); writeln(memavail); end; end; end; end.