Студопедия — New(p);
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

New(p);






End;

Таким образом, дерево на рисунке 4 б) можно представить так, как на
рисунке 5.

Далее будем иметь дело только с двоичными деревьями, поэтому термин “дерево” будет означать двоичное дерево.

3. ОСНОВНЫЕ ОПЕРАЦИИ С ДВОИЧНЫМИ ДЕРЕВЬЯМИ

3.1. Обход дерева

Наиболее распространенная задача обработки древовидных структур – выполнение некоторой определенной операции над каждым элементом дерева. При этом происходит “посещение” всех вершин, т.е. обход дерева. При обходе каждый узел проходится, по меньшей мере, один раз, а, вообще говоря, три раза. Полное прохождение дерева дает линейную расстановку узлов. Если, обходя дерево, обрабатывать вершины при первой встрече, то (см. рис. 4 б)) получим последовательность A, B, D, E, C, F; если при второй встрече, то получим D, B, E, A, C, F; если при третьей встрече, то получим D, E, B, F, C, A.

Эти три способа обхода называются соответственно

– обходом сверху вниз (в прямом порядке, префиксным обходом, preorder);

– обходом слева направо (в обратном порядке, инфиксным обходом,
inorder);

– обходом снизу вверх (в концевом порядке, постфиксным обходом,
postorder или endorder).

Способы прохождения деревьев определяются рекурсивно. Если дерево пусто, то никаких действий не выполняется, в противном случае обход выполняется в три этапа

Префиксный обход Инфиксный обход
Обработать узел Пройти левое поддерево
Пройти левое поддерево Обработать узел
Пройти правое поддерево Пройти правое поддерево

Постфиксный обход

Пройти левое поддерево

Пройти правое поддерево

Обработать узел

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

Все три метода легко представляются как рекурсивные процедуры.

Пример 3.1. Префиксный обход дерева:

procedure PreOrder(T: Tree);

Begin

if T <> nil then

Begin

{ операция обработки узла дерева, например, writeln(T^.inf);}

PreOrder (T^.L);

PreOrder (T^.R)

End

end; { PreOrder }

Пример 3.2. Инфиксный обход дерева:

procedure InOrder(T: Tree);

Begin

if T <> nil then

Begin

InOrder (T^.L);

{ операция обработки узла дерева, например, writeln(T^.inf);}

InOrder (T^.R)

End

end; { InOrder }

Пример 3.3. Постфиксный обход дерева:

procedure PostOrder(T: Tree);

Begin

if T <> nil then

Begin

PostOrder (T^.L);

PostOrder (T^.R)

{ операция обработки узла дерева, например, writeln(T^.inf);}

End

end; { PostOrder }

Замечание. Ссылка T передается как параметр - значение, т.е. в процедуре используется ее локальная копия.

При реализации нерекурсивных процедур обхода дерева обычно используют вспомогательный стек и операции работы с ним:

– очистить стек (создать пустой стек);

– проверить, является ли стек пустым;

– добавить в стек элемент;

– извлечь элемент из стека.

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

Пример 3.4. Описать нерекурсивную процедуру префиксного обхода
дерева.

Описание вспомогательного стека:

type Stack = ^Rec;

Rec = record

inf_S: Tree;

next: Stack

End;

Процедура добавления в стек start элемента T:

procedure Push (var start:Stack; T: Tree);

var p:Stack;

Begin

new(p);

p^.inf_S:=T;

p^.next:=start;

start:=p

End;

Процедура извлечения из стека start элемента T:

procedure Pop (var start:Stack; var T: Tree);

var p:Stack;

Begin

p:=start;

T:=start^.inf_S;

start:=start^.next;







Дата добавления: 2015-08-12; просмотров: 364. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

Концептуальные модели труда учителя В отечественной литературе существует несколько подходов к пониманию профессиональной деятельности учителя, которые, дополняя друг друга, расширяют психологическое представление об эффективности профессионального труда учителя...

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия