Помощь - Поиск - Пользователи - Календарь
Полная версия: Бинарное дерево
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zigfried
Подскажите пожалуйста как можно написать итерационную процедуру подсчёта количества листьев в дереве
volvo
В правом верхнем углу есть ссылка "Поиск". Почему не пользуешься? Все уже давно решено:

листья дерева-итеративный алгоритм
Zigfried
Спасибо большое smile.gif
Zigfried
Прошу прощения что 2 раз обращаюсь в теме. Прошу помочь с дописанием задачи(плохо понимаю в модульном программировании).

Условие:
Посчитать количество листьев в бинарном дереве:
а)Не рекурсивно(с помощью стека)
б)Рекурсивно

Все нужные процедуры собраны в модулях.

Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
volvo
1) корректируешь функцию Leaves так, чтобы она не эмулировала стек, а его использовала:
function Leaves(t: ttree): integer;
var
s: TStack;
sp, counter: integer;
begin
Stack_Init(s);
counter := 0;
repeat
while t <> nil do
begin
Stack_Push(s, t);
t := t^.left;
end;
if s = nil then
begin
Leaves := counter;
exit;
end;
t := Stack_Pop(s);
if (T^.right = nil) and (T^.left = nil) then
inc(counter);
t := t^.right;
until false;
end;

2) подключаешь к модулю TreeUnit два модуля: Types и Stack, и к модулю Stack подключаешь Types.
3) описываешь правильный тип поля данных в стеке: он должен хранить не целые числа, а указатель на дерево:
unit Types;

interface
type
TTree = ^TNode;

Telem = TTree;
TStack = ^Telement;
Telement =
Record
Info: Telem;
Next: TStack
End;

T = Integer;
TNode =
record
value: T;
Left, Right: TTree;
end;

implementation
end.


Все, пишешь основную программу и проверяешь работоспособность.
Zigfried
Спасибо за помощь smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.