- •Оглавление
- •Бинарные деревья
- •Основные понятия и определения.
- •Основные операции с бинарными деревьями Узел бинарного дерева
- •Обход бинарного дерева.
- •Упорядоченные деревья. Включение нового узла, поиск по дереву с включением
- •Упорядоченные деревья. Поиск заданного значения.
- •Удаление бинарного дерева.
- •Удаление узла из упорядоченного дерева
- •Пример использования упорядоченного бинарного дерева для частотного анализа данных
Оглавление
Оглавление 1
Бинарные деревья 2
Основные понятия и определения. 2
Основные операции с бинарными деревьями 3
Узел бинарного дерева 3
Обход бинарного дерева. 3
Упорядоченные деревья. Включение нового узла, поиск по дереву с включением 5
Упорядоченные деревья. Поиск заданного значения. 6
Удаление бинарного дерева. 7
Удаление узла из упорядоченного дерева 8
Пример использования упорядоченного бинарного дерева для частотного анализа данных 9
Задачи 11
Бинарные деревья
Рассмотрим структуры данных, определяемые с помощью рекурсии. Среди них наиболее важными являются деревья. Деревья имеют широкое применение при реализации трансляторов таблиц решений, при работе с арифметическими выражениями, при создании и ведении таблиц символов. Деревья наилучшим образом приспособлены для решения задач искусственного интеллекта и синтаксического анализа. Деревья в информатике принято рисовать перевернутыми – растущими вниз.
Основные понятия и определения.
Древовидная структура (дерево) определяется следующим образом: дерево (tree) с базовым типомТ– это:
либо пустая структура;
либо узел типа Т, с которым связано конечное число древовидных структур, называемыхподдеревьями.
Если с узлом связаны только два поддерева, то дерево называется бинарным. В дальнейшем мы будем рассматривать только бинарные деревья. Бинарное дерево изображено на рис.1.
Рис.1. Представление бинарного дерева
Терминология, применяемая для описания деревьев:
узел(node) – это точка, где может возникнуть ветвь. На рис.1 узлы – это, например, 70 и 200 и т.д;
корень (root)– “верхний” узел дерева. Для дерева на рис.1 это узел 100;
ветвь (brunch)–отрезок, описывающий связь между двумя узлами;
лист (leaf)– узел, из которого не выходят ветви, т.е. не имеющий поддеревьев. На рис.1 это узлы 10, 90, 58, 65, 170, 210;
родительским (parent)– называется узел, который находится непосредственнонаддругим узлом;
дочерним (child)– называется узел, который находится непосредственноподдругим узлом;
предки данного узла – это все узлы на пути вверх от данного узла до корня. Например, предками узла 60 являются узлы 55, 50, 70, 100;
потомки – все узлы, расположенные ниже данного. Для узла 55 потомками являются узлы 60, 58, 65;
внутренний узел(internal node) – узел, не являющийся листом;
порядок узла(node degree) – количество его дочерних узлов;
глубина(depth)узла – количество его предков плюс единица;
глубина (высота) дерева –максимальная глубина всех узлов;
длина пути к узлу– количество ветвей, которые нужно пройти, чтобы дойди от корня к данному узлу;
длина пути дерева(длина внутреннего пути) – сумма длин путей всех его узлов.
Основные операции с бинарными деревьями Узел бинарного дерева
При определении узла бинарного дерева в Delphi-программе нам требуются две связи (т.е. указатели) с его дочерними узлами и фактические данные (информационная часть), которые должны храниться в узле. При работе программы дерево может модифицироваться: добавляются или удаляются узлы, изменяется информационная часть. То есть дерево является динамической структурой. Узел дерева можно описать как переменную с фиксированной структурой, содержащую информационную часть (например, целое число) и две ссылки, указывающие на левое и правое поддеревья данного узла. Для этого подойдет тип – запись (record). Ссылка на пустое дерево должна быть равна nil.
Описание узла дерева может выглядеть так:
type PTree = ^TTree; // указатель на узел дерева
TTree = record
Inf: integer; // информационная часть (тип может быть любой и зависит от задачи)
Left, Right:PTree; // указатели на левое и правое поддеревья
end;