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

3.3. Бинарные деревья

3.3.1. Определение. Представления бинарных деревьев

Бинарное (двоичное) дерево — особый вид дерева, в котором каждый узел имеет не более двух поддеревьев, причем в случае одного поддерева следует различать левое и правое поддерево. При изображении бинарных деревьев левого и правого сына различают по наклону соединительной линии (влево или вправо). На рис.3.4 показаны два различных бинарных дерева. Интересно отметить, что если рассматривать данные структуры как обычные упорядоченные деревья, то они являются полностью идентичными (в упорядоченном дереве единственный сын всегда первый, т. е. левый потомок). Это говорит о том, что бинарные деревья не являются частным случаем упорядоченого дерева, а представляют собой особый вид деревьев.

Рис.3.5. Два различных бинарных дерева

Приведем формальное рекурсивное определение бинарного дерева [8].

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

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

Бинарное дерево может быть представлено и в форме скобочного выражения. Аналогично обычному корневому дереву, для бинарного дерева также возможен различный порядок перечисления узлов в скобочном представлении. Например, левое скобочное представление непустого бинарного дерева рекурсивно определяется так:

(<корень> (<левое поддерево> <правое поддерево>))

Иногда при записи левое и правое поддерево разделяют запятыми, но чаще пробелом.

Левое или правое поддерево или оба вместе (для листьев) могут быть пустыми, при этом для пустых деревьев часто используется специальное обозначение . Чтобы сократить запись, в ней разрешается опустить правое поддерево, если оно пустое, а для листьев опустить оба пустых поддерева (но нельзя опускать пустое левое поддерево, иначе по такой записи нельзя будет правильно восстановить изображение бинарного дерева!). Так, деревьям, изображенным на рис.3.5, соответствуют различные левые скобочные записи в сокращенной форме:

( a ( b (c ( e) d ) ) )

( a (  b ( c ( e ) d ) )

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

3.3.2. Математические свойства и специальные виды бинарных деревьев

Бинарные деревья, как абстрактные математические объекты, обладают рядом интересных свойств, которые потребуются при анализе различных алгоритмов, как использующих деревья в качестве структур данных (сортировка, сжатие, поиск данных), так и не использующих деревья в явном виде, например, алгоритмы типа «разделяй и властвуй». Многие алгоритмы используют специальные виды бинарных деревьев, которые обладают дополнительными полезными свойствами. Рассмотрим этот вопрос подробнее.

На любом уровне k бинарное дерево может содержать от 1 до 2k узлов (k=0,1,..h, где h — высота дерева). На рис. 3.6,а дерево содержит 8 узлов при высоте 3, в то время как дерево на рис 3.6,б содержит 5 узлов при высоте 4.

Рис.3.6. Бинарные деревья различной плотности

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