Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
01.05.2014
Размер:
50.18 Кб
Скачать

Задание:

Обработка АВЛ-деревьев. Операции вставки, удаления- демонстрация.

Анализ условия:

Наибольший интерес представляет само создание дерева.

По определению: АВЛ дерево-это дерево, разность высот поддеревьев которого не более 1.

Элементы в дереве записаны по возрастанию (либо по убыванию) при обходе справа налево. Это значительно облегчает поиск по дереву.

Итак, предложим алгоритм вставки элемента:

  1. Надо найти место элемента в дереве. Для чего становимся на корень, и если значение корня больше значения нового элемента, то шаг в левое поддерево, если нет, то в правое.

  2. Если на каком-то шаге оказалось, что данный элемент уже существует, то выход из алгоритма.

  3. Когда место найдено, производится вставка элемента как листа.

При этом может возникнуть следующая проблема: Дерево потеряет балансировку. Для этого разработаны две процедуры: ReverseR и ReverseL- вращения дерева вправо и влево соответственно.

Существует теорема, утверждающая, что в любом случае таких вращений при вставке понадобиться не боле двух.

Операция удаления всегда связана с поиском по дереву, так как нужный элемент всегда сначала нужно найти.

Более того: что делать с двумя поддеревьями этого элемента?

В данном случае используется операция вращения, пока одно из поддеревьев не будет пустым. Затем производится удаление и обратная операция.

Разработка структур данных:

Дерево в программе хранится в виде карты. Например:

Дерево: В программе:

№ 1 2 3 4 5

5 val: 5 6 3 1 4

3 6 r: 2 0 5 0 0

1 4 l: 3 0 4 0 0

Hr: 1 0 1 0 0

Hl: 2 0 1 0 0

F: 0 1 1 2 2

Такой вид записи облегчает поиск по дереву, и саму операцию удаления.

Но при вставке необходим обратный ход от последнего элемента до корня с целью увеличения значений высот поддеревьев.

Так же вместе с картой хранится число элементов дерева.

Сценарий диалога с пользователем:

Рабочее окно выглядит следующим образом:

Основные операции вынесены на форму, а так же дублируются в главном меню окна.

При обращении к любой из операций вид дерева автоматически отображается в левой части окна.

Клавиша “Print”-нарисовать дерево, оставлена для совместимости.

Вместе с тем предусмотрены операции «Ввести из Файла»- ввод дерева из указанного файла. И «Ввести вручную»- ввод сразу нескольких узлов.

Хотя дерево можно задать и путем поэлементной вставки, но если дерево большое, то удобнее вводить по несколько элементов сразу.

Вывод:

АВЛ деревья- одни из наиболее пригодных деревьев с точки зрения поиска элемента. Хотя они и не так «низки» как идеально- взбалансированные, но строятся быстрее и легче.

Тест:

Начальное Дерево операция Результат

4 вставка 7 4

  1. 5 2 5

1 3 1 3 7

6 вставка 5 3

  1. 7 2 6

1 3 1 5 7

4 удаление 4 2

  1. 7 1 7

1 3 3

4 удаление 2 4

  1. 7 3 7

1 3 1

Соседние файлы в папке АВЛ - деревья