Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в сравнении деревьев 
:(
    Опции темы
kaizer131
  Дата 25.5.2010, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



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

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

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

   
Код

  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.



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

PM MAIL   Вверх
kaizer131
Дата 25.5.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



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

If (tree2^.KEY = key) Then

так, иду дальше,
 теперь нужно чтоб он выводил найденные ключи 
PM MAIL   Вверх
kaizer131
Дата 25.5.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



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

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

не выводит ничего ....:confused: smile 
PM MAIL   Вверх
kaizer131
Дата 26.5.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



Всё , проблема решена, тема закрыта .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.