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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.06.2015, 02:57
luftfanol luftfanol вне форума
Прохожий
 
Регистрация: 30.04.2015
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Выполнить симметричную прошивку бинарного дерева поиска

Выполнить симметричную прошивку бинарного дерева поиска. Обойти его согласно симметричному порядку следования элементов.
У меня есть часть кода для этого,но не знаю как это все сделать в работающем виде. Надеюсь вы поможете

Код:
Узел прошитого бинарного дерева имеет иную структуру
 
     Type ptr = ^node;        
   node = record    
    info : integer; {Информационное поле}
    ltag, rtag : boolean; {Тэги прошивочных нитей}
           left, right : pt;  {Указатели на левое и правое поддеревья}
end;
 
Логические поля в прошитом дереве могут принимать следующие значения.
1.  ltag=true, следовательно, left представляет собой обычную связь.
2.  ltag=false, следовательно, left указывает на узел-предшественник.
3.  rtag=true, следовательно, right  представляет собой обычную связь.
4.  rtag=false, следовательно, right указывает на узел-преемник.
 
 
Программный код процедур симметричного обхода sim_print и прошивки правых связей rightsew будет выглядеть так:
 
procedure sim_print(var x:pt);
       procedure rightsew( var p:pt);
         begin
            if y <> nil then
               begin
                  if y^.right=nil then
                    begin
                        y^.rtag := false;
                        y^.right := p;
                  end
               else    y^.rtag := true;
            end;
           y:=p;
        end;
    begin
      if  x<> nil then
        begin
        sim_print(x^.left);
        rightsew(x);
        sim_print(x^.right);
     end;
 
1.  Переход к корню дерева ( p := HEAD^.left ). 
2.  До тех пор, пока p^.left<>nil, повторять: p := p^.left,  то есть идти по левой ветви до самого левого узла. 
3.  Обработка узла p, например, печать p^.info. 
4.  Если p^.rtag равен false, то p := p^.right  и переход к шагу 3 ( к преемнику). Иначе p:= p^.right  и переход к шагу 2. 
Алгоритм заканчивает работу, когда p станет равным HEAD.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter