Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Бинарное дерево

Автор: Zigfried 6.12.2010 17:00

Подскажите пожалуйста как можно написать итерационную процедуру подсчёта количества листьев в дереве

Автор: volvo 6.12.2010 17:26

В правом верхнем углу есть ссылка "Поиск". Почему не пользуешься? Все уже давно решено:

http://forum.pascal.net.ru/index.php?s=&showtopic=7512&view=findpost&p=53475

Автор: Zigfried 6.12.2010 17:29

Спасибо большое smile.gif

Автор: Zigfried 13.12.2010 19:22

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

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

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

Прикрепленный файл  Types.pas ( 320 байт ) Кол-во скачиваний: 458
Прикрепленный файл  Lyalikov22.pas ( 1.71 килобайт ) Кол-во скачиваний: 485
Прикрепленный файл  Unit1.pas ( 1.07 килобайт ) Кол-во скачиваний: 469

Автор: volvo 13.12.2010 19:48

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 13.12.2010 19:55

Спасибо за помощь smile.gif