Деревья: ориентированные, упорядоченные и бинарные.
Дерево — это граф, который характеризуется следующими свойствами:
- 1. Cуществует единственный элемент (узел или вершина), на который не ссылается никакой другой элемент — и который называется КОРНЕМ .
- 2. Начиная с корня и следуя по определенной цепочке указателей, содержащихся в элементах, можно осуществить доступ к любому элементу структуры.
- 3. На каждый элемент, кроме корня, имеется единственная ссылка, т.е. каждый элемент адресуется единственным указателем.
Название «дерево» проистекает из логической эквивалентности древовидной структуры абстрактному дереву в теории графов. Линия связи между парой узлов дерева называется обычно ВЕТВЬЮ. Те узлы, которые не ссылаются ни на какие другие узлы дерева, называются ЛИСТЬЯМИ (или терминальными вершинами) Узел, не являющийся листом или корнем, считается промежуточным или узлом ветвления (нетерминальной или внутренней вершиной). Для ориентированного графа число ребер, исходящих из некоторой начальной вершины V, называется ПОЛУСТЕПЕНЬЮ ИСХОДА этой вершины. Число ребер, для которых вершина V является конечной, называется ПОЛУСТЕПЕНЬЮ ЗАХОДА вершины V, а сумма полустепеней исхода и захода вершины V называется ПОЛНОЙ СТЕПЕНЬЮ этой вершины. Дерево
Лес Ниже будет представлен важный класс орграфов — ориентированные деревья — и соответствующая им терминология. Деревья нужны для описания любой структуры с иерархией. Традиционные примеры таких структур: генеалогические деревья, десятичная классификация книг в библиотеках, иерархия должностей в организации, алгебраическое выражение, включающее операции, для которых предписаны определенные правила приоритета. Ориентированное дерево — это такой ациклический орграф (ориентированный граф), у которого одна вершина, называемая корнем, имеет полустепень захода, равную 0, а остальные — полустепени захода, равные 1. Ориентированное дерево должно иметь по крайней мере одну вершину. Изолированная вершина также представляет собой ориентированное дерево. Вершина ориентированного дерева, полустепень исхода которой равна нулю, называется КОНЦЕВОЙ (ВИСЯЧЕЙ) вершиной или ЛИСТОМ; все остальные вершины дерева называют вершинами ветвления. Длина пути от корня до некоторой вершины называется УРОВНЕМ (НОМЕРОМ ЯРУСА) этой вершины. Уровень корня ориентированного дерева равен нулю, а уровень любой другой вершины равен расстоянию (т.е. модулю разности номеров уровней вершин) между этой вершиной и корнем. Ориентированное дерево является ациклическим графом, все пути в нем элементарны. Во многих приложениях относительный порядок следования вершин на каждом отдельном ярусе имеет определенное значение. При представлении дерева в ЭВМ такой порядок вводится автоматически, даже если он сам по себе произволен. Порядок следования вершин на некотором ярусе можно легко ввести, помечая одну вершину как первую, другую — как вторую и т.д. Вместо упорядочивания вершин можно задавать порядок на ребрах. Если в ориентированном дереве на каждом ярусе задан порядок следования вершин, то такое дерево называется УПОРЯДОЧЕННЫМ ДЕРЕВОМ. Введем еще некоторые понятия, связанные с деревьями. Узел X называется ПРЕДКОМ (или ОТЦОМ), а узлы Y и Z называются НАСЛЕДНИКАМИ (или СЫНОВЬЯМИ) их соответственно между собой называют БРАТЬЯМИ. Причем левый сын является старшим сыном, а правый — младшим. Число поддеревьев данной вершины называется СТЕПЕНЬЮ этой вершины. ( В данном примере X имеет 2 поддерева, следовательно СТЕПЕНЬ вершины X равна Если из дерева убрать корень и ребра, соединяющие корень с вершинами первого яруса, то получится некоторое множество несвязанных деревьев. Множество несвязанных деревьев называется ЛЕСОМ Мы видели, что последовательности и списки можно определить следующим образом: любая последовательность (список) с базовым типом Т — это либо: пустая последовательность (список); либо конкатенация (цепочка) из элемента типа Т и последовательности с базовым типом Т. Здесь для определения принципов структурирования (следования или итерации) используется рекурсия. Следование и итерация встречается настолько часто, что их обычно считают фундаментальными «образами» как структур данных, так и «управления» в программах. Однако всегда следует помнить, что с помощью рекурсий их только можно определять, но рекурсии можно эффективно и элегантно использовать для определения более сложных структур. Хорошо известным примером служат деревья. Пусть древовидная структура определяется следующим образом:древовидная структура с базовым типом Т — это либо: 1) пустая структура; либо 2) узел типа Т, с которым связано конечное число древовидных структур с базовым типом Т, называемых поддеревьями. Из сходства рекурсивных определений последовательностей и древовидных структур видно, что последовательность (список) есть древовидная структура, у которой каждый узел имеет не более одного «поддерева». Поэтому последовательность (список) называется также вырожденным деревом. Существует несколько способов изображения древовидной структуры. Например, пусть базовый тип Т есть множество букв; такая древовидная структура разными способами изображена на рис. Все эти представления демонстрируют одну и ту же структуру и поэтому эквивалентны. С помощьюграфа можно наглядно представить разветвляющиеся связи, которые по понятным причинам привели к общеупотребительному термину «дерево». Однако довольно странно, что деревья принято рисовать перевернутыми или — если кто-то предпочитает иначе выразить этот факт — изображать корни дерева. Но последняя формулировка вводит в заблуждение, так как верхний узел (Л) обычно называюткорнем. Хотя мысознаем, что в природе деревья представляют собой несколько более сложные образования, чем наши абстракции, мы будем в дальнейшем древовидные структуры называть просто деревьями.Упорядоченное дерево — это дерево, у которого ветви каждого узла упорядоченные. Следовательно, два упорядоченных дерева— это особые, отличные друг от друга деревья. Узел у, который находится непосредственно под узлом х, называется (непосредственным) потомком х; если л находится науровнеI, то говорят, чтоу — на уровнеi-\-\. Наоборот, узелх называется (непосредственным)предком у. Считается, что корень дерева расположен на уровне 1. Максимальный уровень какого-либо элемента дерева называется его глубиной или высотой. Если элемент не имеет потомков, он называется терминальным элементом или листом, а элемент, не являющийся терминальным, называетсявнутренним узлом. Число (непосредственных) потомков внутреннего узла называется егостепенью. Максимальная степень всех узлов есть степень дерева. Число ветвей, или ребер, которые нужно пройти, чтобы продвинуться от корня к узлух, называетсядлиной пути.Корень имеет длину пути 1, его непосредственные потомки — длину пути 2 и т. д. Вообще, узел на уровне i имеет длину пути L Длина пути дерева определяется как сумма длин путей всех его узлов. Она также называется длиной внутреннего пути. Например, длина внутреннего пути дерева, изображенного на рис. 2.1, равна 52.
Рис 2.1.Представления древовидной структуры. Для того чтобы определить, что называется длиной внешнего пути, мы будем дополнять дерево специальным узлом каждый раз, когда в нем встречается нулевое поддерево. При этом мы считаем, что все узлы должны иметь одну и ту же степень — степень дерева. Следовательно, подобное расширение дерева предполагает заполнение пустых ветвей, разумеется, при этом специальные узлы не имеют дальнейших потомков. Дерево на рис. 2.1, дополненное специальными узлами, показано на рис. 2.3, где специальные узлы изображены квадратиками.
Рис. 2.2 Два различных бинарных дерева.
Рис. 2.3. Тернарное дерево со специальными узлами. Длина внешнего пути теперь определяется как сумма длинпутей всех специальных узлов. У дерева, приведенного на рис. 2.3, длина внешнего пути равна 153. Число специальных узлов т, которые нужно добавить к дереву степени d, непосредственно зависит от числа п исходных узлов. Заметим, что на каждый узел указывает ровно одна ветвь. Следовательно, в расширенном поддереве имеется m -f- n ветвей. С другой стороны, из каждого исходного узла выходят d ветвей, а из специальных узлов — ни одной. Поэтому всего имеетсяdn -f- 1 ветвей (1 дает ветвь, указывающую на корень). Из этих двух формул мы получаем следующее равенство между числом m специальных узлов и п исходных узлов: dn + 1 = m -f- n,илиm=(d—l)n+l. Максимальное число узлов в дереве заданной высоты h достигается в случае, когда все узлы имеют d поддеревьев, кроме узлов уровня h, не имеющих ни одного. Тогда в дереве степени d первый уровень содержит 1 узел (корень),уровень2 содержит d его потомков, уровень 3 содержит d2 потомков d узлов уровня 2 и т. д. Это дает следующую величину: Nd (А) = 1 +d+d2+ . +dh‘1= £dl в качестве максимального числа узлов для дерева с высотой h и степенью d. При d= 2 мы получаем N2(h)=Z 2′ = 2 ft -l. Упорядоченные деревья степени 2 играют особо важную роль. Они называются бинарными деревьями. Мы определяем упорядоченное бинарное дерево как конечное множество элементов (узлов), каждый из которых либо пуст, либо состоитиз корня (узла), связанного с двумя различными бинарнымидеревьями, называемыми левым и правым поддеревом корня. В следующих пунктах этого раздела мы будем рассматривать исключительно бинарные деревья и поэтому будем употреблять слово «дерево», имея в виду «упорядоченное бинарное дерево». Деревья, имеющие степень больше 2, называются сильно ветвящимися деревьями (multiwaytrees).. Знакомыми примерами бинарных деревьев являются фамильное (генеалогическое) дерево с отцом и матерью человека в качестве его потомков (!), история теннисного турнира, где узлом является каждая игра, определяемая ее победителем, а поддеревьями — две предыдущие игры соперников; арифметическое выражение с двухместными операциями, где каждаяоперация представляет собой ветвящийся узел с операндами в качестве поддеревьев.
Источник