Нужно напечатать все элементы с листьев дерева - Turbo Pascal
Формулировка задачи:
Привет! Нужна помощь с деревьями. Нужно напечатать все элементы с листьев дерева. Буду очень благодарен!
Решение задачи: «Нужно напечатать все элементы с листьев дерева»
textual
Листинг программы
program pr;
type
Pnode = ^node;
node = record
data: integer;
left, right: Pnode;
end;
var
tree: Pnode;
n, x, i: integer;
procedure addtotree(var tree: Pnode; x: integer);
begin
if tree = nil then
begin
new(tree);
tree^.data := x;
tree^.left := nil;
tree^.right := nil;
exit;
end;
if x < tree^.data then
addtotree(tree^.left, x)
else addtotree(tree^.right, x);
end;
procedure lkp(tree: Pnode);
begin
if tree = nil then exit;
Lkp(Tree^.left);
write(' ', Tree^.data);
Lkp(Tree^.right);
end;
procedure PrintList(ANode: pnode);
begin
if anode = nil then exit;
if(anode ^.Left = nil) and (anode^.Right = nil) then
write(' ', anode^.Data);
PrintList(anode^.Left);
PrintList(anode^.Right);
end;
begin
writeln('Введите количество элементов');
readln(n);
for i := 1 to n do
begin
x := random(21);
addtotree(tree, x);
end;
writeln('Все элементы дерева');
lkp(tree);
writeln;
writeln('Листья');
PrintList(tree);
end.
Объяснение кода листинга программы
- Создается тип данных Pnode, который представляет узел дерева. Узел содержит данные, а также ссылки на левого и правого потомков.
- Создается переменная tree типа Pnode, которая будет представлять дерево.
- Переменная n и переменная x инициализируются значением 1 и случайным числом соответственно.
- Если дерево равно nil, то создается новый узел, инициализируется его данным значением, а также устанавливаются ссылки на левого и правого потомков как nil.
- Если x меньше значения data дерева, то вызывается функция addtotree, которая добавляет x в левое поддерево.
- Если x больше или равно значению data дерева, то вызывается функция addtotree, которая добавляет x в правое поддерево.
- Вызывается функция lkp, которая рекурсивно обрабатывает левое и правое поддерево дерева.
- Выводится сообщение
Все элементы дерева. - Вызывается функция PrintList, которая рекурсивно обрабатывает левое и правое поддерево дерева.
- Выводится сообщение
Листья. - Выводится список листьев дерева.