Центр оптико-нейронных технологий
ФГУ ФНЦ НИИСИ РАН |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ДеревьяОпределение дерева
Данное определение является рекурсивным. Рекурсия используется в большом числе алгоритмов работы с деревьями. Из определения дерева ясно, что линейный список можно рассматривать как дерево, в котором каждая вершина имеет не более одного поддерева. Поэтому список иногда назы-вают вырожденным деревом. Изображение структуры деревьев
Некоторые определенияУпорядоченное дерево - это дерево, к которого ребра (ветви), исходящие из каждой вершины, упорядочены. Поэтому следующие два упорядоченных дерева - разные, отличные друг от друга объекты: Непосредственный потомок вершины X - вершина Y, находящаяся непосредственно ниже X и связанная с ним. При этом вершина X является непосредственным предком Y (X родительская вершина для Y). Например, в следующем дереве вершины J, K, L являются потомками E, а E для них - предок. В свою очередь, E является потомком B, а B для нее - предок. Если вершина не имеет потомков, то ее называют терминальной вершиной или листом. Нетерминальные вершины (имеющие потомков) называются внутренними. Уровень вершины (узла) дерева - удаленность вершины от корня. Уровень корня равен нулю. Максимальный уровень вершин в дереве называется высотой или глубиной дерева. Пример: Высота дерева равна 3; листья: B, D, F, G; внутренние вершины: A, C, E. Число потомков вершины называется степенью вершины. Например, в следующем дереве степень E равна 3, степень B - 2, степень D - 1, степени I, J, K, L - 0 (листья всегда имеют степень 0). Линейный список можно рассматривать как дерево со степенью узлов не выше 1. Например, список A - B - C - D - E можно представить в виде следующих вырожденных деревьев:
Двоичные (бинарные) деревьяДвоичное (бинарное) дерево - это упорядоченное дерево со степенью вершин не вы-ше 2. У каждой вершины такого дерева есть не более 2 поддеревьев, называемых левым и правым поддеревьями. Примеры:
Везде далее будем под термином <дерево> подразумевать <упорядоченное двоичное дерево>.
Поле info содержит информацию, хранящуюся в вершине, а поля llink и rlink являются указателями на левое и правое поддерево соответственно. Если у вершины нет какого-либо из поддеревьев, то соответствующий ему указатель равен nil. Тогда дерево выражения (a+b/c)*(d-e*f) в памяти будет храниться следующим образом: (root - указатель на корень дерева). Алгоритм построения дерева из n вершин с равномерным их размещениемПри заданном числе вершин n минимальная высота дерева будет достигнута, если на всех уровнях, кроме последнего, помещается максимально возможное число вершин (на уровне k можно разместить до 2k вершин). Такое дерево называется идеально сбалансированным. Если общее число вершин n известно, то для построения идеально сбалансированного дерева необходимо размещать новые вершины в дереве поровну слева и справа от каждой вершины. Проще всего записать такой алгоритм, использую рекурсию:
Функция Tree строит идеально сбалансированное дерево из n вершин и возвращает ука-затель на корень дерева:
Использование:
Пример работы для 7 узлов A, B, C, D, E, F, G (нарисовать структуру вложенных рекурсивных вызовов): Печать дерева на экране начиная со строки номер h
(функция wherex из модуля crt возвращает текущую координату x курсора, а процедура gotoxy устанавливает курсор в заданную позицию на экране). (нарисовать структуру вложенных рекурсивных вызовов для дерева из 7 узлов) Литература
Copyright c2000-2002 Михаил
Марковский |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© Центр оптико-нейронных технологий
Федеральное государственное учреждение Федеральный научный центр Научно-исследовательский институт системных исследований Российской академии наук All rights reserved. 2016 г. |