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

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

7.3.4 Связанная структура для двоичных деревьев

В этой секции мы представляем внедрение двоичного дерева T как связанный struc-ture, названный LinkedBinaryTree. Мы представляем каждый узел v T объектом узла, хранящим связанный элемент и указатели на его родителя и двух детей. (См. рисунок 7.13.) Для простоты, мы предполагаем, что дерево надлежащее, означая, что у каждого узла есть или ноль или два ребенка.

Рисунок 7.13: узел в связанной структуре данных для представления двоичного дерева.

В рисунке 7.14 мы показываем связанное представление структуры двоичного дерева.

структура хранит размер дерева, то есть, число узлов в дереве и указатель на корень дерева. Остальная часть структуры состоит из узлов, соединенных соответственно. Если v - корень T, то указатель на родительский узел ПУСТОЙ, и если v - внешний узел, то указатели на детей v ПУСТЫЕ.

Рисунок 7.14: пример связанной структуры данных для представления двоичного дерева.

290

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

Мы начинаем, определяя базовые компоненты, которые составляют класс LinkedBinaryTree. Самое основное предприятие - Узел структуры, показанный в Кодовом Фрагменте 7.17, который представляет узел дерева.

Узел struct //узел дерева

Элемент elt; //стоимость элемента

Узел* паритет; //родительский Узел* уехал; //оставленный детский Узел* право; //правильный ребенок

Узел (): elt (), паритет (ПУСТОЙ), оставленный (ПУСТОЙ УКАЗАТЕЛЬ), правильный (ПУСТОЙ УКАЗАТЕЛЬ)//конструктор

;

Кодовый Фрагмент 7.17: Узел Структуры, осуществляющий узел двоичного дерева. Это

вложенный в защищенном разделе класса BinaryTree.

Хотя все его участники общественные, Узел класса объявлен в защищенном разделе класса LinkedBinaryTree. Таким образом это не публично доступно. У каждого узла есть членская переменная elt, который содержит связанный элемент и паритет указателей, оставленный, и право, которые указывают связанным родственникам.

Затем, мы определяем общественное Положение класса в Кодовом Фрагменте 7.18. Его мадам данных - частота ошибок по битам состоит из указателя v к узлу дерева. Доступ к элементу узла обеспечен, перегрузив dereferencing оператора (» * «). Мы объявляем Связанными - BinaryTree, чтобы быть другом, если это доступ к частным данным.

Положение класса //положение в дереве

частный:

N o de* v; //указатель на общественность узла:

Положение (Узел* v = ПУСТОЙ УКАЗАТЕЛЬ): v (v) //конструктор

Elem& оператор* () //g et el ement

возвращают v-> elt;

Положение оставило () константу //получают покинутого ребенка

возвращают Положение (v-> оставленный);

Право положения () константа //получают правильного ребенка

возвращают Положение (v-> право);

Родитель положения () константа //получают родителя

возвращают Положение (v-> паритет);

bool isRoot () константа //корень дерева?

возвращают v-> паритет == ПУСТОЙ УКАЗАТЕЛЬ;

bool isExternal () константа //внешний узел?

возвращают v-> оставленный == ПУСТОЙ УКАЗАТЕЛЬ && v-> право == ПУСТОЙ УКАЗАТЕЛЬ;

;

друг класс LinkedBinaryTree;

//предоставьте доступ дерева

станд. typedef:: список <Положение> PositionList;

//список положений

Кодовый Фрагмент 7.18: Положение Класса, осуществляющее положение в двоичном дереве. Это вложено в общественном разделе класса LinkedBinaryTree.