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

7.3. Двоичные деревья 299

методы к двоичным деревьям предлагают третье пересечение в двоичном дереве, которое отличается

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

Пересечение Inorder двоичного дерева

Дополнительный пересекающийся метод для двоичного дерева - inorder пересечение. В этом пересечении мы посещаем узел между рекурсивными пересечениями его левого и правого под - деревья. inorder пересечение поддерева, внедренного в узле p в двоичном дереве T, дано в Кодовом Фрагменте 7.27.

Алгоритм inorder (T, p):

если p - внутренний узел тогда

inorder (T, p.left ()) Рекурсивно пересекают оставленное поддерево

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

если p - внутренний узел тогда

inorder (T, p.right ()) Рекурсивно пересекают правильное поддерево

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

Например, inorder пересечение двоичного дерева, показанного в рисунке 7.14, посещает узлы в заказе ATL, BWI, JFK, СЛАБЫЙ, PVD. inorder пересечение двоичного дерева T может быть неофициально рассмотрено как посещение узлов T «слева направо». Действительно, для каждого узла p, inorder пересечение посещает p после всех узлов в левом поддереве p и перед всеми узлами в правильном поддереве p. (См. рисунок 7.18.)

Рисунок 7.18: пересечение Inorder двоичного дерева.

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

Деревья двоичного поиска

Позвольте S быть набором, у элементов которого есть отношение заказа. Например, S мог быть рядом целых чисел. Дерево двоичного поиска для S - надлежащее двоичное дерево T таким образом что:

• Каждый внутренний узел p T хранит элемент S, обозначенного с x (p)

• Для каждого внутреннего узла p T, элементы, сохраненные в левом поддереве p,

меньше чем или равный x (p) и элементы, сохраненные в правильном поддереве p,

больше, чем или равный x (p)

• Внешние узлы T не хранят элемента

inorder пересечение внутренних узлов дерева двоичного поиска T посещает

элементы в неуменьшающемся заказе. (См. рисунок 7.19.)

Мы можем использовать дерево двоичного поиска T, чтобы определить местонахождение элемента с определенной стоимостью x, пересекая вниз дерево T. В каждом внутреннем узле мы сравниваем ценность текущего узла к нашему элементу поиска x. Если ответ на вопрос «меньше», то поиск продолжается в левом поддереве. Если ответ «равен», то поиск заканчивается успешно. Если ответ «больше», то поиск продолжается в правильном поддереве. Наконец, если мы достигаем внешнего узла (который пуст), тогда поиск заканчивается неудачно. (См. рисунок 7.19.)

Обратите внимание на то, что время для поиска в дереве двоичного поиска T пропорционально высоте T. Вспомните из Суждения 7.10, что высота дерева с n узлами может быть столь же маленькой как O (зарегистрируйте n), или столь же большой какW (n). Таким образом деревья двоичного поиска

самый эффективный, когда у них есть маленькая высота. Мы иллюстрируем поиск в качестве примера в дереве двоичного поиска в рисунке 7.19. Мы изучаем деревья двоичного поиска более подробно в Разделе 10.1.

Рисунок 7.19: хранение дерева двоичного поиска целые числа. Синий твердый путь пересечен, ища (успешно) 36. Синий расплющенный путь пересечен, ища (неудачно) 70.