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

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

295

Операция

Время

левый, правильный, родитель, isExternal, isRoot

O (1)

размер, пустой

O (1)

корень

O (1)

expandExternal, removeAboveExternal

O (1)

положения

O (n)

Таблица 7.2: Продолжительность для функций двоичного дерева n-узла осуществлена со связанной структурой. Космическое использование - O (n).

7.3.5 Основанная на векторе структура для двоичных деревьев

Простая структура для представления двоичного дерева T основана на способе пронумеровать

узлы T. Для каждого узла v T, позвольте f (v) быть целым числом, определенным следующим образом:

• Если v - корень T, то f (v) = 1 • Если v - покинутый ребенок узла u, то f (v) = 2 f (u) • Если v - правильный ребенок узла u, то f (v) = 2 f (u) + 1

Функция нумерации f известна как нумерация уровня узлов в двоичном дереве T, потому что она нумерует узлы на каждом уровне T в увеличивающемся заказе слева направо, хотя она может пропустить некоторые числа. (См. рисунок 7.16.)

Функция нумерации уровня f предлагает представление двоичного дерева T посредством вектора S, такой, что узел v T связан с элементом S в разряде f (v). (См. рисунок 7.17.) Как правило, мы понимаем вектор S посредством растяжимого множества. (См. Раздел 6.1.3.) Такое внедрение просто и эффективно, поскольку мы можем использовать его, чтобы легко выполнить корень функций, родителя, оставленного, право, родной брат, isExternal, и isRoot при помощи простых арифметических операций на числах f (v) связанный с каждым узлом v вовлеченный в операцию. Таким образом, каждый объект положения v является просто «оберткой» для индекса f (v) в вектор S. Мы оставляем детали таких внедрений как простое упражнение (R-7.26).

Позвольте n быть числом узлов T и позволить из быть максимальным значением f (v) по всем узлам T. У вектора S есть размер N = из + 1, так как элемент S в индексе 0 не связан ни с каким узлом T. Кроме того, у S будут, в целом, много пустых элементов, которые не относятся к существующим узлам T. Для дерева высоты h,

N = O (2 ч). В худшем случае это может быть настолько же высоко как 2n- 1. Оправдание

оставленный как упражнение (R-7.24). В Разделе 8.3 мы обсуждаем класс названных двоичных деревьев

«кучи» те, для который N = n + 1. Таким образом, несмотря на использование пространства худшего случая, есть заявления, для которых представление списка множества двоичного дерева - эффективное пространство. Однако, для общих двоичных деревьев показательное требование пространства худшего случая этого представления препятствует.

296

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

Таблица 7.3 суммирует продолжительность функций двоичного дерева imple-чеканивший с вектором. Мы не включаем функций обновления дерева здесь. Векторное внедрение двоичного дерева - быстрый и легкий способ понимания двоичного дерева ADT, но это может быть очень космически неэффективный, если высота дерева большая.

(a)

(b)

Рисунок 7.16: нумерация уровня Двоичного дерева: (a) общая схема; (b) пример.

Рисунок 7.17: Представление двоичного дерева T посредством вектора S.