Теория языков программирования и методы трансляции. Копейкин М.В - 7 стр.

UptoLike

f=^nd; {определение адреса }
nd=RECORD
k:integer; { значение, размещаемое в узле }
lf,rf:f; { адреса порождаемых узлов слева и справа}
END;
VAR n:integer; rt:f;
{ построение сбалансированного двоичного дерева с n узлами }
function tree(n:integer):f;
VAR newnd:f;
x,nl,nr:integer;
{ NIL – означает адрес пуст, т.е. адреса нет }
BEGIN
if n=0 then tree:=NIL else
begin nl:=n div 2; nr:=n-nl-1;
write(' Введите значение X=');
readln(x); new(newnd); { запрос на текущий адрес}
with newnd^ do
begin k:=x; lf:=tree(nl); rf:=tree(nr);
end;
tree:=newnd;
end;
END; { результат выполнения - адрес последнего узла }
{ вывод дерева в
горизонтальном положении }
procedure printtree(T:f; H:integer);
VAR
i:integer;
begin { печать дерева со сдвигом }
if T<>NIL then
with T^ do
begin printtree(lf,h+1);
for i:=1 to h do write(' ');
writeln(k:3); { вывод значения узла }
printtree(rf,h+1);
end;
end;
{ основная программа }
Begin
write(' Введите число узлов=');
readln(n);
rt:=tree(n);
writeln(' Вывод дерева ');
printtree(rt,0); readln; {пауза для фиксирования состояния экрана}
end.