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

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

Форум «Всё о Паскале» _ Теоретические вопросы _ Добавление нового элемента в двоичное дерево поиск

Автор: Гость_HelpAusHeaven 14.04.2004 14:52

У кого-нить есть готовая рекурсивная функция для добавления элемента в двоичное дерево поиска?? (отсортированное... добавление не нарушая порядка...)

Автор: Altair 14.04.2004 18:12

Посмотрите по этому адресу:
http://forum.pascal.net.ru/index.php?showtopic=2706&view=findpost&p=28334

Автор: HelpAusHeaven 14.04.2004 19:29

О! Как раз то, что мне надо. Спасибо!!
А как на счет красивого вывода, хотя бы текстового с уровнями?
К примеру:
X1|-----------|
__X2|---------|
____X3|-------|
__X4|---------|

В общем так или иначе, спасибо за функции!

Автор: Altair 14.04.2004 20:33

Цитата
В общем так или иначе, спасибо за функции!

Спасибо! Стараюсь!
Красивый вывод БУДЕТ!

Автор: HelpAusHeaven 14.04.2004 21:16

type
 TTree=^TNode;
 TNode = record
   Int : Integer;
   Left, Right : TTree;
 end;

var MyTree : TTree;

procedure Add(var Tree: TTree; i: integer);
begin
 if Tree <> nil then begin
   if Tree.Int < i then Add(Tree.Right,i)
   else if Tree.Int > i then Add(Tree.Left,i)
 end else begin
   new(Tree);
   Tree.Int:=i;
   Tree.Left:=nil;
   Tree.Right:=nil;
 end
end;

function TForm1.Find(var Tree: TTree; i: integer):boolean;
begin
 if Tree <> nil then begin
   if Tree.Int < i then Find(Tree.Right,i)
   else if Tree.Int > i then Find(Tree.Left,i)
   else if Tree.Int = i then ShowMessage('I found it!');
 end else ShowMessage('Tree is empty:(');
end;

......
Add(MyTree,5);
Add(MyTree,7);
... ... ...
Add(MyTree,3);
Find(MyTree,7);
......


При выполнении этого кода у меня в "поиске" выдается сообщение, что дерево пустое...
Оно пустое, скорее всего, из-за того, что указатель MyTree стоит уже не на вершине дерева, а на одном из "листов" дерева (одной из конечных точек дерева)...
Как мне поправить эту ситуацию?
Заводить ещё одну переменную для хранения адреса памяти вершины дерева?? Или есть другой способ...??

Автор: HelpAusHeaven 15.04.2004 3:21

Цитата(Oleg_Z @ 14.04.04 16:33)
Спасибо! Стараюсь!
Красивый вывод БУДЕТ!

За ранее спасибо!!