388
>
{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} 

