Доброго времени суток.
Есть необходимость сравнить содержимое двух деревьев на совпадение ключей их звеньев (содержимое ключей задается случайным образом)
У меня возникает ошибка в функции, которая сравнивает ключи в двух деревьях.
(построение и вывод деревьев проводятся без ошибок)
Идентифицировать ошибку не могу так, как консоль попросту вылетает, где то в строках (по разному)
Код:
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.
Буду благодарен за помощь или за ссылки на материалы по сравнению бинарных деревьев поиска ( Гугл ничего толкового не выдал )