Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.05.2010, 09:18
kaizer131 kaizer131 вне форума
Начинающий
 
Регистрация: 01.11.2008
Сообщения: 112
Репутация: 10
Восклицание Ошибка в сравнении деревьев

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

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

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

Код:
  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  
Старый 25.05.2010, 10:46
kaizer131 kaizer131 вне форума
Начинающий
 
Регистрация: 01.11.2008
Сообщения: 112
Репутация: 10
По умолчанию

так с одним разобрался
пропустил else в строке

If (tree2^.KEY = key) Then

так, иду дальше,
теперь нужно чтоб он выводил найденные ключи
Ответить с цитированием
  #3  
Старый 25.05.2010, 14:27
kaizer131 kaizer131 вне форума
Начинающий
 
Регистрация: 01.11.2008
Сообщения: 112
Репутация: 10
По умолчанию

Ничего не понимаю,
строка if TreeSearch( tree2, tree1^.KEY) = true then
проверяет возвращает ли функция TreeSearch истинну или ложь т.е совпадает ли значение текущего ключа в дереве 1 с ключами дерева 2, проверка проходит нормально (при совпадении присваивается истинна) но почему- то строки
Код:
if TreeSearch( tree2, tree1^.KEY) = true then
       Writeln (tree1^.Key, ' Found');
не выводит ничего ....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025