![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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');![]() |