Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 2_Инф._структуры.doc
Скачиваний:
70
Добавлен:
15.02.2015
Размер:
1.28 Mб
Скачать

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

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

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

Рекурсивное определение бинарного дерева: это пустое дерево, либо корень с двумя бинарными деревьями. Бинарное дерево может быть пустым

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

Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553

Рис. 14.

Между бинарными деревьями с узлами и-деревьями сузлами можно установить взаимно однозначное соответствие следующим образом. Ко всем концевым узлам бинарного дереваприсоединим-дерево с тем же корнем и двумя помеченными узлами ■; ко всем не концевым узлам с одним потомком присоединим ещё одного потомка в виде помеченного узла. В результате бинарное дерево перейдёт в-дерево, все концевые узлы которого помечены. Обратно, удаляя все концевые узлы-дерева, получим бинарное дерево(рис. 15).

Ещё один частный случай бинарного дерева — полное бинарное дерево. В таком дереве каждый узел, не являющийся листом, имеет степень (имеет два поддерева) и все листья имеют один и

Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553

Рис. 15

тот же уровень . Числов этом случае называется уровнем полного бинарного дерева. В полном бинарном дереве количество узловравно сумме геометрической прогрессии:

.

Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553

Рис. 16.

На (рис. 16) изображено полное бинарное дерево уровня .

С рекурсивным определением бинарных деревьев связан естественный способ их представления в памяти компьютера в виде цепных списков или в виде массивов.

Представление бинарных деревьев цепным списком. Списочное представление бинарных деревьев основано на элементах, соответствующих узлам дерева. Каждый элемент наряду с полем данных имеет два поля указателей. Один указатель используется для связывания элемента с левым потомком, а другой с правым. Листья имеют пустые указатели потомков. При таком способе представления обязательно следует сохранять указатель на узел, являющийся корнем всего дерева.

Итак, для представления бинарного дерева вводится указатель на дерево (адрес корня), и в каждый узел помимо поля значениявключаются ещё два поляи(рис. 17) для цепной адресации с двумя узлами следующего уровня — левым и правым, которые являются корнями соответствующих поддеревьев; в случае отсутствия одного из них или обоих в эти поля помещается соответствующий признак. Указатель пустого дерева.

Рис. 17.

Пример. Дерево, изображённое на рис. 18, имеет в памяти представление, приведённое на рис. 19.

Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553Овал 553

Рис. 18.

Рис. 19.

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

Рис. 20.

Если есть основания предполагать, что число уровней дерева в процессе работы с ним не будет значительно меняться, то данный способ представления полного бинарного дерева значительно более экономичен, чем представление списковой структурой.

Для представления неполных бинарных деревьев можно применить следующий способ:

1. Бинарное дерево дополняется до полного дерева, вершины последовательно нумеруются.

2. В массив заносятся поля данных только тех узлов, которые были в исходном неполном дереве, в соответствии с индексами этих узлов в полном дереве.

3. В незанятые элементы массива заносится характерное значение в качестве признака пропуска элемента.

Если узел имеет в дереве уровень и занимает среди узлов этого уровня позицию с номером, то для его индекса в представляющем массиве справедлива формула:. Индекс корня оказывается равен единице. Для любого узла с координатами в деревеиндексыиего левого и правого потомков вычисляются по формулам:

; .

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