![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток.
Есть необходимость сравнить содержимое двух деревьев на совпадение ключей их звеньев (содержимое ключей задается случайным образом) У меня возникает ошибка в функции, которая сравнивает ключи в двух деревьях. (построение и вывод деревьев проводятся без ошибок) Идентифицировать ошибку не могу так, как консоль попросту вылетает, где то в строках (по разному) Код:
else If (tree2^.KEY < key) Then tree2 := tree2^.RIGHT; // в правом поддереве If (tree2^.KEY = key) Then Result:= TRUE; // Возвратить найденное Думаю что причина в неправильной работе с памятью, но могу ошибаться. Сама функция TreeSearch, вызывается из процедуры Printtree_Left ниже приведён кусок кода, отвечающий за поиск и сравнение : Код:
function TreeSearch(var tree2:TREE; key:integer) :boolean; Begin result:=false; While (result <> true) and (tree2 <> NIL) Do Begin If (tree2^.KEY > key) Then tree2 := tree2^.LEFT // искать в левом поддереве else If (tree2^.KEY < key) Then tree2 := tree2^.RIGHT; // в правом поддереве If (tree2^.KEY = key) Then Result:= TRUE; // Возвратить найденное End ; End ; {Hисходящий обход бинаpного деpева} PROCEDURE Printtree_Left (tree1: tree; tree2:tree); BEGIN If tree1<>Nil then begin if TreeSearch( tree2, tree1^.KEY) = true then Writeln (tree1^.Key, ' Found'); Writeln (tree1^.Key, ' [', tree1^.INFORM,'] '); Printtree_Left (tree1^.Left,tree2); Printtree_Left (tree1^.Right,tree2) ; end ; END; var tree1:TREE=nil; tree2:TREE=nil; begin Printtree_Left (tree1,tree2); readln; end. Буду благодарен за помощь или за ссылки на материалы по сравнению бинарных деревьев поиска ( Гугл ничего толкового не выдал ) |