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

2.5. Деревья

2.5.1. Исходные понятия

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

Следующее далее определение дерева формализует тип данных со связями/отношениями между узлами: один узел является исходным, из него «растут» ветки с другими узлами; если убрать ветки, идущие из корня, получатся несколько структур с меньшим количеством узлов, которые также следует считать деревьями (рис. 9, 10).

Группа 563

a

b

c

d

e

f

g

Рис. 9.

Рис. 10.

Рекурсивное определение: Дерево — это конечное множество узлов, обладающее следующими свойствами:

1) выделен ровно один узел, называемый корнем;

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

Если дерево содержит всего один узел , топо определению является корнем. Далее, дерево с двумя узлами иметь только следующий вид (рис. 11):

a

b

Рис. 11.

Дерево с тремя узлами и корнем может иметь одну из следующих структур (рис. 12):

1) ;

2) ; тогда, либо.

а

а

а

b

c

а

b

c

b

b

c

c

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

Рис. 12.

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

Возможны эквивалентные приведённому, но уже нерекурсивные определения дерева, использующие понятия теории графов [2, 6, 10, 15]:

1. Дерево — это связный граф, не имеющий циклов.

2. Дерево — это граф, в котором любые две вершины соединены ровно одним простым путем.

3. Дерево — это связный граф, теряющий связность после удаления любого ребра.

Степень узла и уровень узла

С понятием дерева, как структуры данных, связаны следующие определения.

Каждый узел дерева либо является корнем некоторого поддерева, либо концевым узлом (листом). Неконцевой узел называется узлом ветвления. Количество поддеревьев узла называется его степенью.

Пример. На рис. 9 концевые узлы имеют степень; узелимеет степень; узелимеет степень; кореньисходного дерева имеет степень.

Рекурсивно определяется уровень узла по отношению к дереву , содержащему его: если узел является корнем, то его уровень равен нулю; уровень любого другого узла на единицу больше, чем уровень корня минимального поддерева содержащего этот узел.

Пример. Узел на рис. 9 имеет уровень; узлыиимеют уровень; узлыимеют уровень; узелимеет уровень.

Степень узла характеризует структуру дерева ниже него, а уровень — структуру дерева выше него.

NB: Степень неконцевого узла на единицу меньше числа дуг, для которых этот узел является одним из концов (исключается «входящая» дуга, идущая от корня минимального поддерева, содержащего данный узел). Уровень узла равен количеству рёбер, которые нужно пройти до него от корня.

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

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

Генеалогия узлов

При работе с деревьями принята «генеалогическая» терминология, согласно которой корень считается родителем корней его поддеревьев и предком других узлов этих поддеревьев

(соответственно, его потомков).

О

Рис. 13.

тметим, чтонастоятельно рекомендуемое оформление компьютерных программ с отступами для вложенных фрагментов (рис. 13) является ещё одним способом оформления дерева.