Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
???????4-???_??????? ?_?????_16_11_14.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.11 Mб
Скачать

13.3 Деревья бинарные

Термин "дерево" был введён в теории графов [8]. Не вдаваясь в математические определения, рассмотрим пример представления дерева в виде рисунка (рис. 1), в чем состоит назначение его частей и какие термины принято использовать.

Рис. 1.

Как и любой граф, дерево состоит из узлов (вершин), соединённых линиями. Если узлы находятся в отношении следования \ предшествования, то линии имеют стрелки (как на рис. 1) и называются дугами, иначе - рёбрами. Узлы могут содержать метки, в качестве которых могут выступать или тексты, или числа, или что-либо другое, или их комбинации.

В дереве всегда есть только один узел, у которого нет предшествующих узлов, называемый корнем дерева (на рисунке это узел с числом 70). Узлы, за которыми не следуют другие, называют терминальными узлами или листьями (на рисунке это узлы с числами 55, 65, 90).

Деревья издавна использовались для наглядного представления различных видов данных с иерархической структурой: генеалогии родóв, властных структур, классификаций объектов природы и проч. Из объектов, имеющих отношение к информатике, древовидную структуру имеют файловые структуры запоминающих устройства и классы в ряде объектно-ориентированных систем программирования. Множество примеров алгоритмов обработки данных, размещаемых в древовидных структурах, представлены в [9] и других публикациях.

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

Структура бинарного дерева

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

struct telement

{

int inf;

telement *L, *R;

};

и изображаются в виде таблиц

то оно будет иметь вид рис. 2.

Рис. 2.

Все работы с деревом в программе начинаются с корневого элемента, поэтому в ней должна быть хотя бы одна переменная, содержащая его адрес. На рис. 2 такую переменную, которая должна иметь тип telement, представляет элемент с именем PK. Листьями дерева, представленного на рис. 2, являются элементы с числами 55, 65 и 90. У соответствующих переменных оба поля указателей должны иметь значение NULL, что на рисунке обозначено значком .

Если в дереве отношения следования узлов задают дуги, то для размещения информации в узлах необходимо использовать некие дополнительные условия. Например, в корне каждого поддерева должно быть число, большее чисел во всех остальных его элементов. Другой пример: в каждом поддереве должно быть число такое, что все элемент его поддерева по левой ветви должны иметь меньшие числа, а в правом поддереве - большие (именно так размещены числа в дереве рис. 2 и именно такой способ размещения данных на дереве будет использован в рассматриваемых далее примерах, а дерево будем называть упорядоченным). При этом следует иметь в виду, что программа должна строить дерево последовательным добавлением элементов.

Изначально дерево должно быть пустым, то есть переменная PK должна иметь значение NULL. Далее очередной элемент будет добавляться как новый лист к узлу, найденному при движении от корня дерева по алгоритму: если добавляемое в дерево число меньше числа очередного узла, то делается переход к следующему узлу - корню левого поддерева, иначе - к корню правого поддерева (считаем, что все числа в создаваемом дереве разные), а если соответствующего поддерева нет, то по этой ветке и добавляется новый узел с заданным числом. Например, если в дерево на рис. 2 нужно добавить число 75, то новый узел будет размещен по левой ветке узла с числом 80. А если добавить число 67, то новый узел будет размещен по правой ветке узла с числом 65.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]