Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Включение и исключение в дереве

Begin

Begin

Begin

Begin

S:= <преобразование информационных
полей элемента рNode^ в строку>;

Form1.Memo1.Lines.Append(S);

End;

 

Теперь можно привести тексты трех подпрограмм обхода, которые реализуют приведенные выше рекурсивные алгоритмы:

Procedure PreOrder(pRoot: Pvertex);

If (aRoot <> Nil) Then Begin

ProcessingNode(pRoot);

PreOrder(pRoot^.Left);

PreOrder(pRoot^.Right);

End;

End;

Procedure InOrder(pRoot: Pvertex);

If (aRoot <> Nil) Then Begin

InOrder(pRoot^.Left);

ProcessingNode(pRoot);

InOrder(pRoot^.Right);

End;

End;

 

Procedure PostOrder(pRoot: Pvertex);

If (aRoot <> Nil) Then Begin

PostOrder(pRoot^.Left);

PostOrder(pRoot^.Right);

ProcessingNode(pRoot);

End;

End;

 

Для активации любой из этих трех процедур, следует воспользоваться вызовом в следующем виде:

<имя процедуры>(Root);

где Root - указатель корня, например: PostOrder(Root).

 

9.4.4 Преобразование любого дерева к бинарному дереву

Любое m -арное дерево (т. е. дерево степени m) может быть преобразовано в эквивалентное ему бинарное дерево, которое проще исходного дерева с точки зрения представления в памяти и обработки. Графически такое преобразование сводится к следующим действиям:

1) сначала в каждом узле исходного дерева вычеркиваем все ветви, кроме самой левой ветви, которая соответствует ссылке на старшего сына;

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

На рисунке 9.10 приведен пример такого преобразования, причем после него из некоторых элементов, исходят две ссылки: горизонтальная соединяет данный элемент с его младшим (в исходном дереве) братом, а вертикальная - с его старшим сыном. Если на рисунке 9.10 повернуть все ссылки на 45° по часовой стрелке, то получим структуру, очень похожую на двоичное дерево. Однако считать ее таковым было бы ошибкой, поскольку функционально горизонтальные и вертикальные ссылки на рисунке 9.10 б имеют совершенно разный смысл. Правильнее было бы использовать следующую интерпретацию: после выполнения указанных преобразований из сыновей каждого родителя образуется линейный список, причем на старшего сына указывает ссылка от его родителя, а сам старший сын находится в голове списка своих братьев.

 

 

Рисунок 9.10 - Преобразование 3-арного дерева к бинарному

 

 

Пользуясь аналогичным алгоритмом можно представить в виде двоичного дерева и лес. На рисунке 9.11 показаны этапы преобразования леса из двух деревьев в бинарное дерево.

Переход от m -арного дерева (или леса) к представлению в виде двоичного дерева при естественном связном хранении сокращает объем занимаемой памяти, поскольку каждый элемент m -арного дерева должен иметь m полей для логических указателей, тогда как элемент двоичного дерева имеет только два таких поля. С другой стороны, при таком преобразовании нужно помнить о функциональном назначении левой и правой ссылок и учитывать это при обработке дерева.

 

 

 

 

 

Рисунок 9.11 - Преобразование леса к бинарному дереву

 

Рассмотрим некоторые особенности операций включения и исключения в любом m ‑арном дереве.

9.5.1 Включение в дереве

Включаемым в дерево объектом является некоторое (другое) дерево, которое затем станет поддеревом. При выполнении операции включения должны быть заданы:

1) включаемое поддерево (т. е. в памяти должна существовать соответствующая древовидная структура),

2) та вершина исходного дерева, к которой «подвешивается» в качестве ветви включаемое дерево и

3) индекс, назначаемый поддереву и определяющий старшинство его корня среди сыновей вершины подключения.

В результате операции включения поддерева Y в вершину Х исходного дерева степень исхода вершины Х увеличивается на единицу и у этой вершины появляется еще один сын. При этом в общем случае потребуется заново перенумеровать вершины-сыновья узла X.

9.5.2 Исключение в дереве

Исключаемым объектом, применительно к произвольному дереву, является некоторое поддерево. В операции исключения следует указать вершину исходного дерева, играющую роль корня исключаемого поддерева, и номер (или индекс) исключаемого поддерева, поскольку одна вершина в зависимости от ее степени исхода может играть роль корня для разных поддеревьев.

Пусть Х - некоторая вершина произвольного дерева, а вершины, Y1..., Yn - ее сыновья. Тогда исключение i -ого поддерева вершины Х означает уменьшение степени исхода Х на единицу и удаление из исходного дерева ветви Х ® Y i , и поддерева, корнем которого служит вершина Y i. В результате такого удаления вершина Х может стать листом.

 


<== предыдущая лекция | следующая лекция ==>
Else Begin | Линейный (последовательный) поиск
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 622; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.