
- •Федеральное агентство по образованию
- •Тема 3. Бинарные деревья 41
- •Тема 4. Графы 66
- •Введение
- •Терминология
- •Классификация структур данных по различным признакам
- •Типовые операции над структурами данных
- •Эффективность алгоритмов. O-обозначения
- •Тема 1. Стеки, очереди, деки
- •Операции над стеком
- •Реализация стека
- •Реализация основных операций над стеком
- •Использование стека для преобразования форм записи выражений.
- •Очередь
- •Операции над очередью
- •Операции над деком
- •Реализация очереди и дека
- •Реализация основных операций над очередью и деком
- •Итератор
- •Лабораторная работа 1. Стеки, очереди, деки
- •Тема 2. Односвязные и двусвязные линейные списки
- •Линейный список
- •Операции над линейным списком
- •Реализация линейного списка в виде односвязной динамической структуры
- •Реализация основных операций над односвязным списком
- •Циклический список
- •Операции над циклическим списком
- •Односвязная реализация циклического списка
- •Реализация основных операций над односвязным циклическим списком
- •Реализация линейного списка в виде двусвязной динамической структуры
- •Реализация основных операций над двусвязным списком
- •Циклический двусвязный список
- •Реализация основных операций над двусвязным циклическим списком
- •Лабораторная работа 2. Односвязные и двусвязные линейные списки
- •Тема 3. Бинарные деревья
- •Основные понятия и определения
- •Построение бинарного дерева
- •Операции над бинарным деревом
- •Реализация бинарного дерева
- •Реализация основных операций над бинарным деревом
- •Дерево выражения
- •Дерево поиска
- •Операции над деревом поиска
- •Реализация дерева поиска
- •Реализация операций над деревом поиска
- •Сбалансированные деревья
- •Включение в сбалансированное дерево
- •Лабораторная работа 3. Бинарные деревья
- •Тема 4.Графы
- •Основные понятия и определения
- •Граф g7
- •Операции над графом
- •Реализация графа
- •Реализация основных операций над ориентированным графом
- •Обход ориентированного графа
- •Вычисление расстояния между узлами ориентированного графа
- •Лабораторная работа 4. Ориентированные графы
- •Библиографический список
Дерево поиска
Бинарные деревья часто используются для представления множества данных, среди которых идет поиск элементов по уникальному ключу. Если дерево организовано так, что для каждого узла tвсе ключи его левого поддерева меньше ключаt, а все ключи правого поддереваtбольше ключаt, то такое дерево будем называтьдеревом поиска. В нем легко найти элемент с нужным ключом – достаточно, начав с корня, двигаться в левое или правое поддерево на основании сравнения заданного ключа с ключом текущего узла. Известно, что изnэлементов можно построить бинарное дерево с высотой не более log2n, поэтому, если дерево идеально сбалансировано, поиск среди егоnэлементов выполняется максимум за log2nсравнений. Подобные деревья широко используются и для сортировки больших массивов данных, так как обход дерева поискаслева направодает отсортированную в порядке возрастания последовательность ключей.
При обходе слева направо дерева поиска, приведенного ниже, получается последовательность: 1, 4, 8, 9, 11, 15, 20.
Операции над деревом поиска
Над деревом поиска могут быть выполнены все операции, определенные для бинарного дерева. Но в основном к дереву поиска применяются операции, определяемые особенностями его организации:
поиск элемента с заданным ключом Keyв дереве и возвращение адреса элемента, если он найден, в противном случае возвращается значениеnil– операцияAddr(Key);
поиск по дереву с включением – поиск элемента с ключом Keyв дереве, подключение узла с этим ключом, если поиск был неудачным, и возвращение адреса элемента с заданным ключом – операцияSearch(Key);
поиск по дереву с исключением – поиск элемента с заданным ключом в дереве и исключение этого элемента, если он найден, – операция Delete(Key); после исключения дерево должно остаться деревом поиска.
Для построения дерево поиска, можно использовать операцию поиска по дереву с включением Search(Key), считывая из входного потока элементы с заданными ключами и включая их в дерево поиска. ОперацияSearch(Key)может быть построена таким образом, что она будет включать в дерево элемент и в том случае, если он уже существует в дереве. Использование такой операции для построения дерева поиска позволяет построить дерево с повторяющимися ключами.
Реализация дерева поиска
В общем случае каждый элемент дерева поиска может содержать в содержательной части Valueспециальное поле, называемое ключом этого элемента. Для упрощения описания будем считать, что полеValueявляется ключом элемента дерева. В этом случае классtSearchTreeможет быть описан как наследник классаtBinaryTree:
type
tSearchTree = class(tBinaryTree) // класс - дерево поиска
function Addr(Key: tValue): pItem; // поиск элемента с ключом Key
function Search(Key: tValue): pItem; // поиск с включением
procedure Delete(Key: tValue); // поиск с исключением
procedure Build(var f: Text); // построение дерева поиска
end; // tSearchTree
Метод Buildдерева поиска перекрывает одноименный метод бинарного дерева, поскольку реализуется иначе. ПолеfRootи все остальные методы бинарного дерева наследуются деревом поиска. МетодыLocate,SearchиDeleteявляются новыми, расширяющими возможности дерева поиска по сравнению с обычным бинарным деревом.