Стандартные операции:
-поиск элемента по значению
-добавление элемента
-поиск максимального/минимального элемента
-поиск предыдущего/следующего по величине элемента
-удаление элемента
-различные варианты обхода дерева – для его вывода, записи в файл или удаления
Если искали число 25
5
Если добавили число 5
Для максимума тем же способом идём вправо.
Можно искать минимум или максимум не всего дерева, а одного из его поддеревьев.
Жёлтым отмечен максимум левого поддерева.
Так, у элемента с числом 3 на схеме есть правый потомок. Минимум в соответствующем поддереве – число 6.
Если правого потомка нет…
При поиске элемента будем запоминать последний элемент, который оказался больше искомого – на нём поиск пошёл в левое поддерево. Он будет следующим, если правого потомка действительно нет.
На схеме этой ситуации соответствуют элементы 7 и 23.
Поиск предыдущего производится аналогично.
Случай 2. У удаляемого элемента один потомок.
Решение: В переменную left или right элемента-отца, где был указатель на удаляемый, записать адрес потомка удаляемого.
Случай 3. У удаляемого элемента два потомка.
Решение: Найти и «отцепить» любой из элементов: содержащий предыдущее или следующее значение. Поставить его на место удаляемого.
Сам найденный элемент стирается из памяти.
А если добавлять по возрастанию – получим вырожденное дерево
-5
3
6
7
23
24
25
26
31
45
23
3
28
-5
7
25
31
45
6
24
26
Дерево из предыдущих примеров является сбалансированным.
Существует несколько вариантов наборов алгоритмов добавления-удаления, при которых поддерживается сбалансированность.
Минимальное количество элементов такого дерева составит
k(N)=1+k(N-1)+k(N-2)
Поскольку k(1)=1, k(2)=2, получаем следующие минимальные количества:
N 3 4 5 6 7 8 9 10
k(N) 4 7 12 20 33 54 88 143
Для сравнения, минимальное число элементов полного дерева равно 2N
Г. М.Адельсон-Вельский
Е. М. Ландис
Схемы балансировки при добавлении
1. hL < hR – после вставки поддеревья выровняются
2. hL = hR – дерево всё ещё сбалансированное
3. hL > hR – (На схеме) после вставки левое поддерево на 2 выше. Требуется балансировка.
B
3
r
2
4
A
1
B
3
Каждый новый узел изначально считается красным. Если это нарушает одно из правил, обычно 4 или 5, производится балансировка…
N
P
U
G
N
P
U
G
После проверить, не нарушает ли «дедушка» G одно из правил
4. Добавление в левое поддерево «отца» P. «Отец»-красный, «дядя» U - чёрный
N
P
U
G
U
N
G
P
5. Добавление в правое поддерево «отца» P. «Отец»-красный, «дядя» U - чёрный
N
P
U
G
N
P
U
G
P
U
G
N
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть