Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач по алгоритмизации.doc
Скачиваний:
10
Добавлен:
06.05.2019
Размер:
1.33 Mб
Скачать

1.2 Деревья

Деревья – наиболее важные нелинейные структуры, которые встречаются при работе с компьютерными алгоритмами. Вообще говоря, древовидная структура задает для узлов отношение «ветвления», которое во многом напоминает строение обычного дерева [2].

Формально дерево (tree) определяется как конечное множество Т одного или более узлов со следующими свойствами:

А) существует один выделенный узел, а именно – корень (root) данного дерева Т;

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

Из этого определения следует, что каждый узел дерева является корнем некоторого поддерева данного дерева. Количество поддеревьев узла называется степенью (degree) этого узла. Узел со степенью нуль называется концевым узлом (terminal node) или листом (leaf). Неконцевой узел называется узлом ветвления (branch node). Уровень (level) узла по отношению к дереву Т определяется рекурсивно следующим образом. Уровень корня дерева Т равен нулю, а уровень любого другого узла на единицу выше, чем уровень корня ближайшего поддерева дерева Т, содержащего данный узел.

Эти понятия иллюстрируются на рис. 2 на примере дерева с семью узлами. Узел А является корнем, который имеет два поддерева: и . Корнем дерева является узел С. Уровень узла С равен 1 по отношению ко всему дереву. Он имеет три поддерева, , и , поэтому С имеет степень 3. Концевыми на рис. 2 являются узлы и . Узел - единственный узел со степенью 1, а узел - единственный узел со степенью 3.

Если в п. Б данного выше определения имеет значение относительный порядок поддеревьев , то дерево является упорядоченным (ordered tree). Если в упорядоченном дереве , то имеет смысл назвать поддерево вторым поддеревом данного корня и т.д. Упорядоченные деревья иногда также называются плоскими деревьями (plane trees), поскольку при их упорядочении имеет значение способ размещения дерева на плоскости. Если не считать различными два дерева, которые отличаются только относительным порядком поддеревьев узлов, то дерево называется ориентированным (oriented), поскольку при этом имеет значение только относительная ориентация узлов, а не их порядок. Сама природа представления данных в компьютере определяет неявный порядок любого дерева, поэтому в большинстве случаев упорядоченные деревья представляют наибольший интерес. Далее будем неявно предполагать, что все рассматриваемые деревья являются упорядоченными, если явно не указано обратное. Соответственно деревья на рис. 2 и 3 в общем случае рассматриваются как разные, хотя как ориентированные деревья они совершенно одинаковые.

Р ис. 2. Пример дерева. Рис. 3. Пример дерева.

Лес (forest) – это множество (обычно упорядоченное), не содержащее ни одного непересекающегося дерева или содержащее несколько непересекающихся деревьев. Тогда еще одна формулировка п. (Б) в данном выше определении дерева могла бы выглядеть так: узлы дерева при условии исключения корня образуют лес.

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

Графически деревья можно представить по-разному. Например, для дерева на рис.2. существует еще три принципиально отличных альтернативных варианта, которые, как показано на рис. 4., отличаются расположением узлов относительно корня. Но изучение литературы и многочисленные неформальные обсуждения широкого круга алгоритмов со специалистами в области информатики показали, что в более чем 80% рассмотренных случаев деревья изображаются с корнем вверху. Поэтому схема дерева будет выглядеть так, как на рис. 4., (b), т.е. с корнем вверху и листьями внизу. В соответствии с такой ориентацией назовём корневой узел вершиной (apex) дерева и будем характеризовать уровни узлов как мелкие и глубокие.

Рис. 4. Как следует рисовать деревья?

Для рассмотрения деревьев необходимо создать хорошую описательную терминологию. На рис. 18 показаны два наиболее распространенных типа генеалогических деревьев. Они отличаются тем, что в родословной показаны предки конкретного человека, а в родовой схеме – его наследники [2].

Рис. 5. Обычная схема дерева.

Стандартная терминология древовидных структур происходит от генеалогических деревьев второго типа, а именно – от родовой схемы. Каждый узел называется родителем (parent) корней его поддеревьев, а сами корни называются братьями-сестрами (siblings), а также детьми (children) своего родителя. Корень всего дерева не имеет родителя. Например, на рис. 5 узел C имеет трех детей, D, E и F, узел E является родителем узла G, а узлы B и C являются братьями-сестрами. Узел имеет не более одного родителя или предка.

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