Нужно напечатать все элементы с листьев дерева - 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, которая рекурсивно обрабатывает левое и правое поддерево дерева.
- Выводится сообщение
Листья
. - Выводится список листьев дерева.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д