Нужно напечатать все элементы с листьев дерева - 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.

Объяснение кода листинга программы

  1. Создается тип данных Pnode, который представляет узел дерева. Узел содержит данные, а также ссылки на левого и правого потомков.
  2. Создается переменная tree типа Pnode, которая будет представлять дерево.
  3. Переменная n и переменная x инициализируются значением 1 и случайным числом соответственно.
  4. Если дерево равно nil, то создается новый узел, инициализируется его данным значением, а также устанавливаются ссылки на левого и правого потомков как nil.
  5. Если x меньше значения data дерева, то вызывается функция addtotree, которая добавляет x в левое поддерево.
  6. Если x больше или равно значению data дерева, то вызывается функция addtotree, которая добавляет x в правое поддерево.
  7. Вызывается функция lkp, которая рекурсивно обрабатывает левое и правое поддерево дерева.
  8. Выводится сообщение Все элементы дерева.
  9. Вызывается функция PrintList, которая рекурсивно обрабатывает левое и правое поддерево дерева.
  10. Выводится сообщение Листья.
  11. Выводится список листьев дерева.

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы