Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

278 Глава 7. Деревья

7.2.2 Пересечение перед заказом

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

В пересечении перед заказом дерева T, корень T посещают сначала, и затем поддеревья, внедренные в его детях, пересечены рекурсивно. Если дерево заказано, то поддеревья пересечены согласно заказу детей. Определенное действие, связанное с «посещением» узла, зависит от применения этого пересечения и могло включить что-либо от увеличивания в противоречии с выполнением некоторого сложного вычисления для этого узла. Псевдокодекс для пересечения перед заказом поддерева, внедренного в узле, на который ссылается положение p, показывают в Кодовом Фрагменте 7.9. Мы первоначально призываем этот установленный порядок с предварительным заказом требования (T, T.root ()).

Предварительный заказ алгоритма (T, p):

выступите действие «посещения» для узла p для каждого ребенка q p делают

рекурсивно пересеките поддерево, внедренное в q, назвав предварительный заказ (T, q)

Кодовый Фрагмент 7.9: предварительный заказ Алгоритма на выполнение пересечения перед заказом поддерева дерева T укоренился в узле p.

Алгоритм пересечения перед заказом полезен для производства линейного заказа узлов дерева, куда родители должны всегда приезжать перед своими детьми в заказ. У таких заказов есть несколько различных заявлений. Мы исследуем простой случай такого применения в следующем примере.

Бумага

Название Резюме §1 §2 §3 Ссылки

§ 1.1 § 1.2 § 2.1 § 2.2 § 2.3 § 3.1 § 3.2

Рисунок 7.6: предварительно закажите пересечение заказанного дерева, где детям каждого узла приказывают слева направо.

7.2. Алгоритмы пересечения дерева 279

Пример 7.6: пересечение перед заказом дерева связалось с документом, как в

Пример 7.3, исследует весь документ последовательно, с начала до конца. Если внешние узлы удалены перед пересечением, то пересечение исследует оглавление документа. (См. рисунок 7.6.)

Пересечение перед заказом - также эффективный способ получить доступ ко всем узлам дерева. Чтобы оправдать это, давайте рассмотрим продолжительность пересечения перед заказом дерева T с n узлами под предположением, что посещение узла берет O (1) время. Анализ алгоритма пересечения перед заказом фактически подобен тому из алгоритма height2 (Кодовый Фрагмент 7.8), данный в Разделе 7.2.1. В каждом узле p, nonre-рукописная часть алгоритма пересечения перед заказом требует времени O (1 + CP), где CP - число детей p. Таким образом, Суждением 7.5, полная продолжительность пересечения перед заказом T - O (n).

Алгоритм preorderPrint (T, p), осуществленный в C ++ в Кодовом Фрагменте 7.10, выполняет печать перед заказом поддерева узла p T, то есть, это выполняет пересечение перед заказом поддерева, внедренного в p, и печатает элемент, сохраненный в узле, когда узел посещают. Вспомните, что, для заказанного дерева T, функция T.children (p) возвращает iterator, который получает доступ к детям p в заказе. Мы предполагаем, что Iterator - этот тип iterator. Учитывая iterator q, связанное положение дано *q.

пустота preorderPrint (константа Tree& T, константа Position& p)

единое время co <<* p; PositionList ch = p.children ();

//элемент печати//список детей

для (Iterator q = ch.begin (); q! = ch.end (); ++ q)

единое время co <<«»;

preorderPrint (T, *q);

Кодовый Фрагмент 7.10: Метод preorderPrint (T, p), который выполняет печать перед заказом

из элементов в поддереве, связанном с положением p T.

Есть интересное изменение функции preorderPrint, которая производит различное представление всего дерева. Вводное представление последовательности P (T) дерева T рекурсивно определено следующим образом. Если T состоит из единственного узла, на который ссылается положение p, то

P (T) = *p.

Иначе,

P (T) = *p +» (» + P (T1) + P (T2) + + P (Tk) +»)», где p - положение корня T и T1, T2..., Tk - поддеревья, внедренные в

дети p, которые даны в заказе, если T - заказанное дерево.

280