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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 14:33   #1
DmuS
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 12
По умолчанию бинарные деревья поиска

Необходимо определить кол-во узлов лежащих на пути между двумя узлами, заданными своими ключами. Вот мои исходники
Код:
procedure TForm3.N19Click(Sender: TObject);
 var x1,x2,kol,fl:integer;

function prohod(t:PNode; l:integer; x:integer):integer;
begin
  if t^.key=x then
    begin
      prohod:=l;
      exit;
    end;
  if t^.key>x then l:=prohod(t^.left,l+1,x)
    else
      if t^.key<x then l:=prohod(t^.right,l+1,x);
end;

procedure der(t:PNode; x1,x2:integer; var kol:integer);
 var k1,k2,l:integer;
begin
  if (x1>t^.key) and (x2>t^.key) then der(t^.right,x1,x2,kol);
  if (x1<t^.key) and (x2<t^.key) then der(t^.left,x1,x2,kol);
  if (x1>t^.key) and (x2<t^.key) then
    begin
      l:=0;
      k1:=prohod(t^.right,l,x1); k2:=prohod(t^.left,l,x2);
      kol:=k1+k2+1;
      exit;
    end;
  if (x1<t^.key) and (x2>t^.key) then
    begin
      l:=0;
      k1:=prohod(t^.left,l,x1); k2:=prohod(t^.right,l,x2);
      kol:=k1+k2+1;
      exit;
    end;
  if x1=t^.key then
    begin
      l:=0;
      if x2=t^.key then begin kol:=0; exit; end;
      if x2>t^.key then begin kol:=prohod(t^.right,l,x2); exit; end;
      if x2<t^.key then begin kol:=prohod(t^.left,l,x2); exit; end;
    end;
  if x2=t^.key then
    begin
      l:=0;
      if x1=t^.key then begin kol:=0; exit; end;
      if x1>t^.key then begin kol:=prohod(t^.right,l,x1); exit; end;
      if x1<t^.key then begin kol:=prohod(t^.left,l,x1); exit; end;
    end;
end;

begin
  x1:=StrToInt(InputBox('Ââåäèòå êëþ÷ ïåðâîãî óçëà','Êëþ÷',''));
  x2:=StrToInt(InputBox('Ââåäèòå êëþ÷ âòîðîãî óçëà','Êëþ÷',''));
  kol:=0;
  der(root,x1,x2,kol);
  fl:=MessageDlg('Êîë-âî óçëîâ '+IntToStr(kol),mtInformation,[mbOk],0);
end;
программа почему то выводит постоянно одно и тоже число, которое превышает кол-во узлов между элементами в несколько раз Подскажите пожалуйста в чем ошибка?
DmuS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарные деревья в c++ eLegAM Помощь студентам 0 21.06.2009 22:12
Бинарные деревья Aleks_90 Помощь студентам 0 07.06.2009 15:06
Бинарные деревья Марсель059 Общие вопросы C/C++ 3 20.05.2009 21:47
бинарные деревья. ribka Помощь студентам 2 30.11.2007 18:13