Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 09:27   #1
kaizer131
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 52
Восклицание Ошибка в сравнении деревьев

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

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

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

Код:
  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.05.2010, 10:29   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
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 //  в правом поддереве
     else If (tree2^.KEY = key) Then
     Result:= TRUE; // Возвратить найденное
  End  ;
End  ;
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 25.05.2010, 10:48   #3
kaizer131
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 52
По умолчанию

Z1000000 СПАСИБО !!!!!
так, иду дальше,
теперь нужно чтоб он выводил найденные ключи
Движение - жизнь. Остановка - ... ?
kaizer131 вне форума Ответить с цитированием
Старый 25.05.2010, 14:28   #4
kaizer131
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 52
По умолчанию

Ничего не понимаю,
строка if TreeSearch( tree2, tree1^.KEY) = true then
проверяет возвращает ли функция TreeSearch истинну или ложь т.е совпадает ли значение текущего ключа в дереве 1 с ключами дерева 2, проверка проходит нормально (при совпадении присваивается истинна) но почему- то строки
Код:
if TreeSearch( tree2, tree1^.KEY) = true then
       Writeln (tree1^.Key, ' Found');
не выводит ничего ....
Движение - жизнь. Остановка - ... ?
kaizer131 вне форума Ответить с цитированием
Старый 26.05.2010, 13:36   #5
kaizer131
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 52
По умолчанию

Всё , проблема решена, тема закрыта .
Движение - жизнь. Остановка - ... ?
kaizer131 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
печать двоичных деревьев в Treeview Xe-Xe Помощь студентам 8 07.06.2010 20:35
Сравнение деревьев kaizer131 Общие вопросы Delphi 0 22.05.2010 10:00
Ошибка при Сравнении времени Студло БД в Delphi 6 07.02.2010 00:12
Поиск лишнего/иного символа при сравнении двух строк Bezdar Microsoft Office Excel 5 13.11.2008 13:07
компонент отображения деревьев IgorKr Компоненты Delphi 3 03.05.2008 09:01