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

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

Обратите внимание на то, что определение P (T) рекурсивное. Кроме того, мы используем «+» здесь, чтобы обозначить связь последовательности. (Вспомните тип последовательности из Раздела 1.1.3.) Вводное представление дерева рисунка 7.2 показывают в рисунке 7.7.

Электроника R'Us (

R &D продажи (

Внутренний международный (

Канада S. Америка за границей (Африка Европа Азия Австралия)))

Покупка производящий (телевизионный тюнер CD))

Рисунок 7.7: Вводное представление дерева рисунка 7.2. Углубление, разрывы линии и места были добавлены для ясности.

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

C ++ функция parenPrint, показанный в Кодовом Фрагменте 7.11, является изменением функции preorderPrint (Кодовый Фрагмент 7.10). Это осуществляет определение, данное выше, чтобы произвести вводное представление последовательности дерева T. Это сначала печатает ele-ment связанный с каждым узлом. Для каждого внутреннего узла мы сначала печатаем» (», сопровождаемый вводным представлением каждого из его детей, сопровождаемых»)».

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

единое время co <<* p; //печатают элемент узла

если (! p.isExternal ())

PositionList ch = p.children (); //список детей

единое время co <<«(»; //o p en

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

если (q! = ch.begin ()) суд <<«»; //печатают сепаратор

parenPrint (T, *q); //посещают следующего ребенка

единое время co <<«)»; //статья o s e

Кодовый Фрагмент 7.11: C ++ внедрение алгоритма parenPrint.

Мы исследуем модификацию Кодового Фрагмента 7.11 в Упражнении R-7.10, к скидке - играют дерево способом, более близко соответствующим данному в рисунке 7.7.

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

7.2.3 Пересечение постзаказа

Другой важный алгоритм пересечения дерева - пересечение постзаказа. Этот algo-rithm может быть рассмотрен как противоположность пересечения перед заказом, потому что это рекурсивно пересекает поддеревья, внедренные в детях корня сначала, и затем посещает корень. Это подобно пересечению перед заказом, однако, в этом мы используем его, чтобы решить особую проблему, специализируя действие, связанное с «посещением» узла p. Однако, как с пересечением перед заказом, если дерево заказано, мы сделали рекурсивные звонки для детей узла p согласно их указанному заказу. Псевдокодекс для пересечения постзаказа дан в Кодовом Фрагменте 7.12.

Постзаказ алгоритма (T, p):

для каждого ребенка q p делают

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

выполните действие «посещения» для узла p

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

Название пересечения постзаказа происходит от факта, что этот пересекающийся метод посещает узел p после того, как это посетило все другие узлы в поддереве, внедренном в p. (См. рисунок 7.8.)

Бумага

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

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

Рисунок 7.8: постзакажите пересечение заказанного дерева рисунка 7.6.

Анализ продолжительности пересечения постзаказа походит на анализ пересечения перед заказом. (См. Раздел 7.2.2.) Полное время, проведенное в нерекурсивных частях алгоритма, пропорционально времени, проведенному, посещая детей каждого узла в дереве. Таким образом пересечение постзаказа дерева T с n узлами берет O (n) время, предполагая, что посещение каждого узла берет O (1) время. Таким образом, в линейное время бежит пересечение постзаказа.

В Кодовом Фрагменте 7.13, мы представляем C ++ функция postorderPrint который за -