АВТИ информатика по паскалю / METOD2 / balans_tree
.docprogram balans;
uses crt;
type ref = ^node;
node = record
info:integer;
left,right:ref
end;
var root:ref; n:integer;
{Построение идеально.сбалансированного дерева}
function tree (n:integer):ref;
var p:ref;
x, nl, nr: integer;
begin
if n=0 then
tree:=nil
else
begin nl:= n div 2; nr:= n-nl-1;
read(x); new(P);
with p^ do
begin info:=x;
left:=tree(nl) ;
right:=tree(nr)
end;
tree:= p;
end {else}
end {tree};
{Vivod dereva na ekran, obxod ARB}
procedure Print_Tree(t:ref;h:integer);
var i:integer;
begin
if t<>nil then
with t^ do
begin
print_tree(left,h+1);
for i:=1 to h do
write(' ');
writeln(info);
writeln;
print_tree(right,h+1)
end
end;
begin
writeln('input number of nodes');
read (n);
root:=tree(n);
PrintTree(root, 4);
end.
{Содержится
ли слово word в
дереве поиска?} function
search (var t:ref; word:st1): ref; var
found : Boolean; begin found:=false; while
(t<> nil) and not found do begin
if t^.info = word then found := true
else
if t^.info > word then
t := t^.left
else
t := t^. right
end;
search
:= t end;
{Добавление слова name к
дереву поиска } procedure
add_tree (var t:ref;word:st1); begin if
t=nil then begin
new(t);
with t^ do
begin info:=word; left:=nil; right:=nil end end else if
t^.info > word then
add_tree (t^.left, word) else
add_tree (t^.right, word) end;
{Построение
дерева root из файла
f c
комнонен. s } procedure
prebuild (s: str6; var f: text; var root: ref);
var p:ref;
begin read (f, s);
if s = ‘*’ then root := nil
else begin new (p);
with p^ do
begin name := s;
prebuild (left);
prebuild (right)
end {with};
root := p;
end {else}
end {prebuid};