помогите разобраться с деревом
Добавлено: 03.01.2010 02:56:55
пытаюсь построить бинарное дерево по принципу направо больший налево меньший, и отсортировать по нему массив, но вот гдето закрались баги. подскажите плиз где накосячил. вот код:
- Код: Выделить всё
program treemake;
uses crt;
const
n = 10;
type
ptr = ^tr;
tr = record
data : integer;
left : ptr;
right : ptr;
end;
var
tree : ptr;
mas : array[1..n] of integer;
j,k : integer;
procedure addleaf(var a : ptr; b : integer); {добавление эл-та}
var
x,y : ptr;
begin
new(x);
x^.data := b; x^.left := nil; x^.right := nil;
if a = nil then a := x
else
begin
y := a;
while y <> nil do
begin
if x^.data < y^.data then y := y^.left
else y := y^.right;
end;
x := y;
end;
end;
procedure MakeTree(var a : ptr; b : array of integer);
var
i : integer;
begin
for i := 1 to n do AddLeaf(a,b[i]);
end;
procedure PrintTree(a : ptr); {обход дерева в обратном порядке}
begin
if a^.left <> nil then PrintTree(a^.left);
write(a^.data,' ');
if a^.right <> nil then PrintTree(a^.right);
end;
begin
clrscr;
randomize;
for j := 1 to n do
begin
mas[j] := random(n);
write(mas[j],' ');
end;
new(tree);
writeln;
MakeTree(tree,mas);
PrintTree(tree);
readkey;
end.