Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие часть1.doc
Скачиваний:
22
Добавлен:
01.03.2025
Размер:
6.94 Mб
Скачать

Идеально сбалансированные бинарные деревья

Рассмотрим еще один вариант заполнения последнего уровня бинарного дерева минимальной высоты, при котором формирующееся дерево всегда будет идеально сбалансированным. Идеально сбалансированным называется такое бинарное дерево, каждый узел которого обладает следующим свойством — количество узлов в его правом и левом поддереве различается не более чем на единицу. Возможная последовательность добавления узлов к бинарному дереву, при которой оно всегда будет идеально сбалансированным, приведена на рис. 3.9.

Рис.3.9. Последовательность построения идеально сбалансированного бинарного дерева

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

Расширенные бинарные деревья

В заключение рассмотрим полезные свойства строго бинарных деревьев (в таких деревьях каждый внутренний узел содержит ровно двух сыновей). Ранее было доказано, что количество листьев в полном бинарном дереве ровно на единицу больше количества внутренних узлов. Можно показать, что данное утверждение справедливо для любого строго бинарного дерева, не обязательно полного. Действительно, пусть количество листьев равно L, а количество внутренних узлов — S. Тогда число ветвей, исходящих из всех внутренних узлов, равно 2S (дерево строго бинарное). Общее количество ветвей дерева на единицу меньше числа узлов и составляет L+S-1 (в каждый узел дерева, кроме корня, входит ровно одна ветвь). Следовательно, 2S=L+S-1, отсюда L=S+1, а общее количество узлов строго бинарного дерева n=2L-1.

Этими полезными свойствами строго бинарных деревьев можно воспользоваться и для анализа обычных бинарных деревьев. Для этого бинарное дерево дополняют фиктивными внешними узлами так, чтобы каждая ветвь дерева заканчивалась таким фиктивным узлом. При таком дополнении любое бинарное дерево превращается в строго бинарное и называется расширенным бинарным деревом. Пример изображения расширенного бинарного дерева изображен на рис. 3.10, при этом фиктивные листья показаны прямоугольниками.

Рис. 3.10. Расширенное бинарное дерево

3.4. Деревья как атд

Аналогично другим структурам данных, таким как линейные и иерархические списки, можно ввести понятия АТД «Дерево», «Лес» и «Бинарное дерево», представив формальную функциональную спецификацию. Однако в данном случае положение осложняется двумя обстоятельствами.

Во-первых, имеется огромное количество алгоритмов, использующих деревья, причем очень часто это деревья специального вида, подобные тем, которые были рассмотрены в предыдущем разделе, а их функции зависят от задачи, для решения которой они предназначены. Во-вторых, для обработки деревьев активно используется как рекурсивный, так и итерационный подход, которые предполагают различные наборы операций (базовых функций). В связи с этим в литературе можно встретить различные варианты функциональной спецификации деревьев [2, 3], а некоторые авторы вообще отказываются от введения АТД при анализе древовидных структур.

Тем не менее, обсуждать вопросы реализации деревьев, не имея никакой функциональной спецификации, затруднительно, поэтому введем соответствующие АТД, выделив минимальный универсальный набор операций. При этом воспользуемся рекурсивным подходом, несколько модифицировав набор операций, который вводился ранее для иерархических списков.