program Project;
{$APPTYPE CONSOLE}
uses
SysUtils; type
Ptr = ^Node; {тип}
Node = record {запись}
key: integer; {ключ,а лучше записать как значение листка. Умнее смотрится)}
left, right: Ptr; {левое, правое поддерево}
end;
var
n: integer;
root: Ptr; {корень дерева}
elem_value: integer;
elem_depth,depth,i: integer; {параметры для вывода дерева}
{получение дерева}
function get_tree(max_depth: integer; cur_depth: integer): Ptr;
var
newNode: Ptr; {новый елемент}
begin
if cur_depth = max_depth then
newNode := nil
else
begin
new(newNode);
with newNode^ do begin
inc(i);
key := i;
left := get_tree(max_depth, cur_depth+1);
right := get_tree(max_depth, cur_depth+1);
end;
end;
result := newNode;
end;
{вывод дерева}
procedure PrintTree(t: Ptr; h: integer);
var i: integer;
begin
if t <> nil then
with t^ do
begin
PrintTree(right, h+5);
for i := 1 to h do write(' ');
write(key);
writeln;
PrintTree(left, h+5);
end;
end;
procedure Resultat(t: Ptr; elem_value : integer; var depth, res : integer);
var i: integer;
cur_depth: integer;
begin
if t <> nil then
with t^ do
begin
cur_depth := depth+1;
Resultat(right, elem_value, cur_depth, res);
if key=elem_value then
res := cur_depth-1;
Resultat(left, elem_value, cur_depth, res);
end;
end;
{основная программа}
Begin
Write('Enter a depth of the tree : ');
Readln(n);
i := 1;
root := get_tree(n, 0);
Write('Enter value of the element, which you want to find : ');
readln(elem_value);
PrintTree(root, 0);
elem_depth := 0; depth := 0;
Resultat(root, elem_value, depth, elem_depth);
Writeln('Your element is on the ',elem_depth,' level under the root.');
readln;
End.
И будет тебесчастье!