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

7.4. Упражнения

315 a. Покажите, что у рисунка T, произведенного preorderDraw, нет пар

из пересекающихся краев. b. Измените двоичное дерево рисунка 7.20, используя preorderDraw. c. Покажите, что у рисунка T, произведенного postorderDraw, нет пар

из пересекающихся краев. d. Измените двоичное дерево рисунка 7.20, используя postorderDraw.

C-7.17 Позвольте действию посещения в Эйлере совершить поездку по пересечению быть обозначенными парой (v, a),

где v - посещаемый узел и одного из левых, ниже, или право. Проектируйте алгоритм для выполнения операции tourNext (v, a), который возвращает действие посещения (w, b) после (v, a). Какова продолжительность худшего случая Вашего алгоритма?

C-7.18 Алгоритм preorderDraw тянет двоичное дерево T, назначая x-и y-

координаты к каждому узлу v следующим образом:

• Набор x (v) равный числу узлов, предшествующих v в предварительном заказе

пересечение T.

• Набор y (v) равный глубине v в T.

a. Покажите что рисунок T, произведенного алгоритмом preorderDraw

не имеет никаких пар пересекающихся краев.

b. Используйте алгоритм preorderDraw, чтобы изменить двоичное дерево, показанное в Фиге -

ure 7.20.

c. Используйте алгоритм postorderDraw, который подобен preorderDraw, но

назначает x-координаты, используя пересечение постзаказа, чтобы изменить bi-дерево не рисунка 7.20.

C-7.19 Проектируйте алгоритм для рисования общих деревьев, который обобщает inorder

пересекающийся подход для рисования двоичных деревьев. C-7.20 Рассмотрите изменение связанной структуры данных для двоичных деревьев где

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

C-7.21 Проектируйте альтернативное внедрение связанной структуры данных для bi-

деревья не, используя класс для узлов, который специализируется в подклассы для внутреннего узла, внешнего узла и узла корня.

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

и оператор назначения) для класса LinkedBinaryTree, данный в Кодовом Фрагменте 7.19.

C-7.23 Наше связанное внедрение двоичного дерева, данное в Кодовом Фрагменте 7.19 как -

sumes, что дерево надлежащее. Проектируйте альтернативное внедрение связанной структуры данных для генерала (возможно неподходящий) двоичное дерево.

316

Глава 7. Деревья c-7.24 Позволяют t быть деревом с n узлами. Определите самого низкого общего предка (lca)

между двумя узлами v и w как самый низкий узел в T, у которого есть и v и w как потомки (где мы позволяем узлу быть потомком себя). Учитывая два узла v и w, опишите эффективный алгоритм для нахождения LCA v и w. Какова продолжительность Вашего метода?

C-7.25 Позвольте T быть деревом с n узлами, и, для любого узла v в T, позволить dv обозначить

глубина v в T. Расстояние между двумя узлами v и w в T - dv + собственный вес- 2 единицы Добсона, где u - LCA u v и w (как определено в предыдущем

осуществление). Диаметр T - максимальное расстояние между двумя узлами

в T. Опишите эффективный алгоритм для нахождения диаметра T. Какова продолжительность Вашего метода?

C-7.26 предположим каждый узел v двоичного дерева T маркирован его стоимостью f (v) в

нумерация уровня T. Проектируйте быстрый метод для определения f (u) для самого низкого общего предка (LCA), u, двух узлов v и w в T, данном f (v) и f (w). Вы не должны найти узел u, просто вычислить его уровень - нумерующий этикетку.

C-7.27 Оправдайте Таблицу 7.1, суммируя продолжительность функций дерева

представленный со связанной структурой, обеспечивая, для каждой функции, de - scription его внедрения и анализа его продолжительности.

C-7.28 Опишите эффективные внедрения expandExternal и удалите -

Двоичное дерево AboveExternal обновляет функции, описанные в Разделе 7.3.4, для случая, когда двоичное дерево осуществлено, используя вектор S, где S понят, используя растяжимое множество. Ваши функции должны работать даже на пустые внешние узлы, предполагая, что мы представляем такой узел как объект обертки, хранящий индекс к пустой или несуществующей клетке в S. Какова продолжительность худшего случая этих функций? Какова продолжительность removeAboveExternal, если у внутреннего удаленного узла есть только внешние дети узла?

C-7.29 Опишите нерекурсивный метод для оценки представления двоичного дерева

арифметическое выражение. C-7.30 Позвольте T быть двоичным деревом с n узлами. Определите римский узел, чтобы быть узлом

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

C-7.31 Позвольте T быть двоичным деревом, представляющим дерево T. (См. Раздел 7.3.8.)

a. Действительно ли предварительный заказ - пересечение T эквивалентный пересечению перед заказом T? b. Действительно ли постзаказ - пересечение T эквивалентный пересечению постзаказа T? c. inorder пересечение T эквивалентный некоторым хорошо структурированный traver-

соль T?