- •Уровни описания структур данных.
- •Статические и динамические объекты программ
- •Ссылочный тип данных
- •Вектор. Функциональная спецификация. Логическое описание и физическое представление.
- •Линейный список. Функциональная спецификация.
- •Линейный список. Физическое представление. Итераторы.
- •Списки общего вида. Представление и обработка графов.
- •Понятие рекурсии. Рекурсия и итерация. Примеры.
- •Деревья. Двоичные деревья.
- •Двоичное дерево. Физическое представление. Прошивка.
- •Алгоритм Кнута Морриса Пратта.
Деревья. Двоичные деревья.
Дерево — ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге). Вершина с нулевой степенью захода называется корнем дерева, вершины с нулевой степенью исхода (из которых не исходит ни одна дуга) называются концевыми вершинами или листьями.
Степень узла — количество исходящих дуг (или, иначе, количество поддеревьев узла).
Концевой узел (лист) — узел со степенью 1 (то есть узел, в который ведёт только одно ребро; в случае ориентированного дерева — узел, в который ведёт только одна дуга и не исходит ни одной дуги).
Узел ветвления — неконцевой узел.
Уровень узла — длина пути от корня до узла. Можно определить рекурсивно:
уровень корня дерева
равен
1(иногда 0);уровень любого другого узла на единицу больше, чем уровень корня ближайшего поддерева дерева , содержащего данный узел.
Глубиной дерева называется наибольшее значение уровня вершины. Для вычисления уровня необходимо вычислить максимальный уровень для всех листов дерева.
Деревья бывают двоичными и общего вида.
Двоичное дерево – конечное множество узлов, которое или пусто, или состоит из корня и 2х непересекающихся поддеревьев, называемых левым и правым поддеревом данного узла. Бинарное дерево не является частным случаем дерева общего вида. В бинарном дереве существенное значение имеет наклон ветвей. Также бинарное дерево может быть пустым. Обычные деревья в информатике представляются специальным классом бинарных деревьев, так как их проще хранить и обрабатывать в таком виде.
Важным для информатики классом являются деревья арифметических выражений с бинарными и унарными операциями, где каждой операции соответствует вершина, поддеревьями которой являются операнды.
Двоичная интерпретация дерева общего вида.
Алгоритм:
Корень обычного есть корень двоичного.
Братья узла являются правыми поддеревьями узла.
Старшим сыном узла является левое поддерево узла.
Двоичное дерево. Функциональная спецификация.
Тип двоичное дерево типа Т определяется так:
Создать empty -> BT(T)
Построить BT(T) * T * BT(T) -> BT(T)
Пусто BT(T) -> bool
Корень BT(T) -> T
Слева BT(T) -> BT(T)
Справа BT(T) -> BT(T)
Уничтожить BT(T) -> empty
Функция слева осуществляет доступ к леому поддререву, справа – к правому. Функция построить создает дерево из корня и 2х заданных поддеревьев (возможно пустых).
Некоторые операции над деревьями:
Чтение данных из узла дерева
Создание дерева, состоящего из одного корневого узла
Построение дерева из заданых корня и нескольких поддеревьев
Присоединение к узлу нового поддерева
Замена поддерева на новое поддерево
Удаление поддерева
Привести свойства операций
Пусто(Создать) = истина
Корень(Построить(BT(л), Т, BT(п)) = Т
И тп.
Двоичное дерево. Логическое описание. Построение и визуализация.
Тип данных дерево отсутствует в универсальных языках программирования, поэтому его необходимо создать самостоятельно.
Цепная структура дерева будет состоять из динамически порождаемых элементов, в которых предусмотрены ссылки на очередные компоненты структуры.
Структура дерева:
Struct node{
T key;
Struct node* left;
Struct node* right;
};
Ввиду нелинейности этих структур усложняется их обход.
Построение дерева зависит от его назначения. Описать алгоритм построения дерева поиска. Описать алгоритм построения дерева выражений (реверс посфиксной записи).
Существуют несколько способов визуализации дерева:
- Вложенные диаграммы включения Эйлера-Вена
- Иерархические скобочные структуры
- Многоуровневая ступенчатая запись
Последняя запись наиболее наглядно позволяет отобразить структуру дерева в терминале ЭВМ
Визуализировать дерево проще всего применяя рекурсивный обход дерева.
