Определение дерева и способы представления в программе

ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ ТИПА «ДЕРЕВО»

Структуру данных типа «дерево» можно определить следующим образом:

Древовидная структура с базовым типом Т это либо пустая структура, либо узел типа Т, с которым связано конечное число древовидных структур с базовым типом Т, называемых поддеревьями. Рассмотренная ранее структура данных типа «линейный разомкнутый список» может рассматриваться как вырожденное дерево.

 
 

Дерево можно изобразить несколькими способами. Наиболее наглядный способ – в виде графа. В этом случае граф выглядит как перевернутое дерево (отсюда и название структуры – «дерево»):

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

Верхний узел дерева называют узлом уровня 1 или корнем дерева. Далее номера уровней возрастают. Максимальный уровень дерева называют также глубиной или высотой дерева. В приведенном выше графе глубина дерева (максимальный уровень узлов дерева) равна четырем.

Два узла У (уровня k) и Х (уровня k+1) определяют следующим образом:

узел У считается предком узла Х, а узел Х – потомком узла У.

Если узел не имеет потомков, он называется терминальным узлом или листом. Все прочие узлы называют внутренними узлами.

Упорядоченное дерево – дерево, у которого ветви каждого узла упорядочены.

Приведенные ниже графы двух упорядоченных деревьев не идентичны (отличаются).

 
 


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

Упорядоченное бинарное дерево – конечное множество элементов (узлов), каждый из которых либо пуст, либо состоит из корня (узла), связанного с двумя различными бинарными деревьями, называемыми левым и правым поддеревьями корня.

 
 

Ниже приведен пример бинарного дерева:

Здесь:

A – корень дерева

B – корень левого поддерева дерева А

C – корень правого поддерева дерева А

D, G, H, I – листья

B – левый потомок дерева A

C – правый потомок дерева A

В программе на Паскале дерево представляется в виде иерархического списка, элемент которого (изображающий узел дерева) можно рассматривать как структуру следующего вида:

Info
Child Next

Здесь

Info – поле, содержащее полезную информацию

Child – ссылка на элемент-потомок

Next – ссылка на элемент того же уровня (на элемент, являющийся братом данного).

Ниже приведен пример упорядоченного дерева в виде графа и в виде иерархического списка:

 
 

Это же дерево в программе можно представлено в виде следующей структуры:

 
 


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

Для описания узла бинарного дерева в программе введем тип, имеющий вид следующей записи:

 
 

Приведем несколько процедур, иллюстрирующих работу с деревьями.


 
 

Пример 1. Процедура создания нового узла.

Пример 2. Процедура создания потомка (поддерева).

 
 

Пример 3. Создание бинарного дерева:

§ данные (целые числа) заносятся с клавиатуры;

§ дубликаты не включаются (но выводятся на экран);

§ признаком окончания ввода является ввод числа 0;

§ результат – бинарное упорядоченное дерево.

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

 
 
Program BuildTree; Type PNode = ^TNode; TNode = record key: integer; left,right: PNode; end; var Root:PNode; {корень дерева} NewData:PNode;{новый узел} n:integer;


Продолжение текста программы смотрите на следующей странице.

 
 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: