Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибка в сравнении деревьев


Автор: kaizer131 25.5.2010, 08:25
Доброго времени суток. 
Есть необходимость сравнить содержимое двух деревьев на совпадение ключей их звеньев (содержимое ключей задается случайным образом) 

У меня возникает ошибка в функции, которая сравнивает ключи в двух деревьях.
(построение и вывод деревьев проводятся без ошибок)

 Идентифицировать ошибку не могу так, как консоль попросту вылетает, где то в строках (по разному)

   
Код

  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.



Буду благодарен за помощь или за ссылки на материалы по сравнению бинарных деревьев поиска  ( Гугл ничего толкового не выдал )

Автор: kaizer131 25.5.2010, 09:46
так с одним разобрался 
пропустил  else  в строке 

If (tree2^.KEY = key) Then

так, иду дальше,
 теперь нужно чтоб он выводил найденные ключи 

Автор: kaizer131 25.5.2010, 13:28
Ничего не понимаю, 
строка    if TreeSearch( tree2, tree1^.KEY) = true then
проверяет возвращает ли функция TreeSearch истинну или ложь т.е совпадает ли значение текущего ключа в дереве 1 с ключами дерева 2, проверка проходит нормально (при совпадении присваивается истинна) но почему- то строки
Код

 if TreeSearch( tree2, tree1^.KEY) = true then
       Writeln (tree1^.Key, ' Found');

не выводит ничего ....:confused: smile 

Автор: kaizer131 26.5.2010, 12:37
Всё , проблема решена, тема закрыта .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)