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

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

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

Автор: Олег 4.06.2007 23:42

Задание - рекурсивно определить высоту бинарного дерева.

Ковырялся-ковырялся, не осилил. Ни в faq, ни в интернете регения не нашел. Есть идеи ,как решать?
Заранее благодарен.

Автор: volvo 4.06.2007 23:48

Что значит "не нашел"? Вот тут: http://forum.pascal.net.ru/index.php?s=&showtopic=4984&view=findpost&p=40331
функция Height по-твоему что вычисляет, как не высоту переданного ей узла? Передавай Root - получишь высоту дерева.

Автор: Гость 4.06.2007 23:54

Спасибо. Но где там используется рекурсия?

Автор: volvo 5.06.2007 0:05

При вычислении rightHeight и leftHeight производится рекурсивный вызов функции Height ...

Автор: Гость 5.06.2007 0:10

Благодарю. Тему можно закрывать.

Автор: Alex1988 6.06.2007 0:28

Помогите написать процедуру, которая высчитывает значение листа двоичного дерева, имеющего наименьшую глубину(листа). wacko.gif

Автор: volvo 6.06.2007 1:22

Посмотри здесь: http://volvo71.narod.ru/faq_folder/bin_tree.htm#bintree_walk , как реализован обход дерева "по уровням". Тебе останется только убрать печать значений, и добавить условие (узел является листом), при достижении которого надо выйти из процедуры...

Автор: Alex1988 9.06.2007 0:31

 procedure CountFunc(dub:ptr; h:integer);
begin
if dub<>nil then begin
if IsTerminal(dub) and (minH >h) then begin
minval:=dub^.list;
minh:=h;
end;
CountFunc(dub^.left,h+1);
CountFunc(dub^.right,h+1);
end;
end;



а вот такая подойдет?

Автор: volvo 9.06.2007 0:44

Не знаю... Что у тебя такое IsTerminal, что minH - мне неизвестно...

Автор: Alex1988 9.06.2007 0:46

Цитата(volvo @ 8.06.2007 21:44) *

Не знаю... Что у тебя такое IsTerminal, что minH - мне неизвестно...

Первое - функция логического типа...
Второе - сам не догоню - вщял с одного сайта

Автор: volvo 9.06.2007 1:18

Да, так тоже можно... Только в minH изначально должно храниться большое значение (если этой переменной присвоить в начале 0, то процедура не даст ожидаемого результата).