Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
attachments_03-09-2012_10-20-12 / Бинарные деревья - дерево бинарного поиска.doc
Скачиваний:
71
Добавлен:
21.05.2015
Размер:
121.86 Кб
Скачать

Оглавление

Оглавление 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;