unit u_lr11; interface type rabotnik=record number:integer; FIO:string[15]; godroj:integer; pol:char; cem:string[15]; koldet:integer; oklad:integer; end; Ptree=^Ttree; Ttree=object data:rabotnik; left,right:Ptree; function addtree(top:Ptree;newnode:rabotnik):Ptree; procedure prosmotr(top:Ptree); function search(top:Ptree;x:rabotnik):boolean; procedure Count_E(Root:Ptree;Var n:Integer;E:rabotnik); procedure delete(var top:Ptree;node:string); end; ftype=file of rabotnik; procedure orgtree(var f:ftype;var top:Ptree); implementation function Ttree.addtree(top:Ptree;newnode:rabotnik):Ptree; begin if top=nil then begin new(top); top^.data:=newnode; top^.left:=nil; top^.right:=nil; end else if top^.data.fio>newnode.fio then top^.left:=addtree(top^.left,newnode) else top^.right:=addtree(top^.right,newnode); addtree:=top end; procedure Ttree.prosmotr(top:Ptree); {процедура просмотра значений узлов дерева слева направо} begin writeln('N ','ФИО':15,' год рожд',' пол',' семсост':12,' дети','оклад'); if top<>nil then begin prosmotr(top^.left); with top^.data do writeln(number,' ',fio:15,' ',godroj:9,' ',pol:4,' ',cem:12,' ',koldet:5,' ',oklad:6); prosmotr(top^.right); end; end; procedure orgtree(var f:ftype;var top:Ptree); var z:rabotnik; begin writeln('выполняется процедура организации дерева'); readln; reset(f); top:=nil; while not eof(f) do begin read(f,z); top:=top^.addtree(top,z); end; end; procedure Ttree.Count_E(Root:Ptree;Var n:Integer;E:rabotnik); begin if Root <> nil then begin with Root^.data do If (FIO=E.FIO) then Inc(n); Count_E(Root^.left,n,E); Count_E(Root^.right,n,E); end; End; function Ttree.search(top:Ptree;x:rabotnik):boolean; begin search:=false; while top<>nil do if top^.data.fio=x.fio then begin search:=true; exit; end else if top^.data.fio>x.fio then top:=top^.left else top:=top^.right; end; procedure Ttree.delete(var top:Ptree; node:string); var q:Ptree; procedure delR(var x:Ptree); begin if x^.right<>nil then delR(x^.right) else begin q^.data:=x^.data; q:=x; x:=x^.left; end; end; begin if top=nil then exit {элемента нет} else if nodetop^.data.fio then delete(top^.right,node) else begin q:=top; if q^.right=nil then top:=q^.left else if q^.left=nil then top:=q^.right else delR(q^.left); dispose(q); end; end; end.