306
>
{determinare numar frunze dintr-un arbore binar,afisare chei din nodurile care au exact un succesor} type arbore=^ref; ref=record inf:integer; st,dr:arbore; end; var r:arbore; f:text; nivel:integer; procedure creare(var p:arbore); var val:integer; begin read(f,val); if val=0 then p:=nil else begin new(p); p^.inf:=val; creare(p^.st); creare(p^.dr); end; end; procedure preordine(p:arbore); begin if p<>nil then begin write(p^.inf:4); preordine(p^.st); preordine(p^.dr); end; end; function nr_fr(p:arbore):integer; begin if p=nil then nr_fr:=0 else if (p^.st=nil) and(p^.dr=nil) then nr_fr:=nr_fr(p^.st)+nr_fr(p^.dr)+1 else nr_fr:=nr_fr(p^.st)+nr_fr(p^.dr); end; procedure un_succesor(p:arbore); begin if p<>nil then begin if ((p^.st<>nil) and(p^.dr=nil)) or ((p^.st=nil) and(p^.dr<>nil)) then write(p^.inf); un_succesor(p^.st); un_succesor(p^.dr); end; end; BEGIN r:=nil; assign(f,'arbore.txt'); reset(f); creare(r); close(f); writeln('parcurgere in preordine-RSD'); preordine(r); writeln; writeln('numarul de frunze din arbore=', nr_fr(r)); writeln('afisarea nodurilor care au exact un succesor:'); un_succesor(r); readln; END. {PascalZone.uv.ro}