![]() |
|
|
Регистрация | << Правила форума >> | 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. Буду благодарен за помощь или за ссылки на материалы по сравнению бинарных деревьев поиска ( Гугл ничего толкового не выдал ) |
#2
|
|||
|
|||
![]() так с одним разобрался
пропустил else в строке If (tree2^.KEY = key) Then так, иду дальше, теперь нужно чтоб он выводил найденные ключи |
#3
|
|||
|
|||
![]() Ничего не понимаю,
строка if TreeSearch( tree2, tree1^.KEY) = true then проверяет возвращает ли функция TreeSearch истинну или ложь т.е совпадает ли значение текущего ключа в дереве 1 с ключами дерева 2, проверка проходит нормально (при совпадении присваивается истинна) но почему- то строки Код:
if TreeSearch( tree2, tree1^.KEY) = true then Writeln (tree1^.Key, ' Found'); ![]() |