- •Оглавление
- •Введение
- •Лабораторная работа №1. Реализация алгоритмов сортировки и поиска Задачи работы
- •Задание на лабораторную работу
- •Сортировка Шелла
- •Сортировка шейкером
- •Сортировка расческой (Comb sort)
- •Плавная сортировка (Smooth sort)
- •Метод Patience sorting
- •Лабораторная работа №2. Понятие контейнера данных. Основные типы контейнеров Задачи работы
- •Задание на лабораторную работу
- •Требования к отчетности по лабораторной работе
- •Предлагаемые этапы выполнения работы
- •Теоретический материал, необходимый для выполнения лабораторной работы Основные типы контейнеров Списки
- •Бинарные деревья поиска
- •Добавление элемента
- •Удаление элемента
- •Понятие сбалансированности дерева
- •Словари
- •Очереди с приоритетами
- •Очереди
- •Лабораторная работа №3. Использование стандартных контейнеров данных Задачи работы
- •Задание на лабораторную работу
- •Лабораторная работа №4. Использование стандартных реализаций алгоритмов stl Задачи работы
- •Задание на лабораторную работу
- •Кафедра компьютерной фотоники
Бинарные деревья поиска
Бинарным деревом поиска [5, гл. 12] называется бинарное дерево [5, пр. B] со следующими свойствами:
С каждым узлом ассоциировано значение, тип данных которого допускает применение операции <.
Левый потомок каждого узла и все поддерево, корнем которого он является (левое поддерево), содержит меньшие значения, чем значение данного узла.
Правый потомок каждого узла и все поддерево, корнем которого он является (правое поддерево), содержит большие значения, чем значение данного узла.
Примеры бинарного дерева поиска приведены на рис. 7.
Рис. 7. Примеры бинарного дерева поиска.
Бинарное дерево поиска может рассматриваться как контейнер. В нем можно определить операции добавления, удаления и поиска элементов. Как правило, операции добавления, удаления и поиска определяются следующим образом:
Поиск
Работа поиска иллюстрируется на рис. 8.
Рис. 8. Поиск в бинарном дереве поиска.
При поиске элемента мы сравниваем значение, которое ищем, со значением корня. Если оно совпало – мы нашли элемент.
Если значение, которое мы ищем, меньше – следует искать в левом поддереве.
Если значение, которое мы ищем, больше – следует искать в правом поддереве.
Далее продолжаем действовать по тому же алгоритму, пока не найдем элемент или пока поддерево, в котором следует искать, не окажется пустым (в этом случае мы можем сказать, что такого элемента в дереве нет).
Время поиска пропорционально высоте дерева.
Добавление элемента
Добавление элемента реализуется аналогично поиску. Поскольку такого элемента еще нет (считаем, что в бинарном дереве поиска не может быть двух элементов с одинаковыми значениями), то в итоге поиска мы найдем пустое поддерево, где этот элемент должен быть.
На месте этого пустого поддерева размещаем элемент.
Рис. 9. Добавление элемента в бинарное дерево поиска.
Время добавления пропорционально высоте дерева.
Удаление элемента
Если удаляемый элемент не имеет потомков, мы можем просто удалить его. См. рис. 10.
Рис. 10. Удаление элемента из бинарного дерева поиска.
Если удаляемый элемент имеет одного потомка – поднимаем этого потомка на имя удаляемого элемента. См. рис. 11.
Рис. 11. Удаление элемента из бинарного дерева поиска.
Если удаляемый элемент имеет двух потомков, нам нужно найти в правом поддереве минимальный элемент. Найти в поддереве минимальный элемент просто.
Если корень не имеет левого потомка – он и есть минимальный.
Иначе минимальный элемент следует искать в левом поддереве. Вернемся к пункту a, но высота нашего дерева стала на единицу меньше.
Таким образом, мы найдем минимальный элемент в поддереве за время, пропорциональное высоте поддерева.
На рис. 12-14 минимальные элементы поддерева выделены голубым цветом.
Найдя минимальный элемент правого поддерева, мы ставим его на место удаляемого элемента. Левого потомка у этого элемента по определению нет (если бы был, был бы еще меньше, и данный элемент не был бы минимальным элементом поддерева). Если нет и правого потомка – элемент можно просто удалить. Если правый потомок есть – ставим этого правого потомка на его место.
Рис. 12. Удаление элемента из бинарного дерева поиска.
Рис. 13. Удаление элемента из бинарного дерева поиска.
Рис. 14. Удаление элемента из бинарного дерева поиска.