- •Содержание
- •Поиск в двоичном дереве…………………….……………………...5 Добавление и удаление элемента ………...…………………………..7
- •Введение
- •13.1. Что такое двоичное дерево поиска?
- •13.2. Поиск в двоичном дереве
- •Следующий и предыдущий элементы
- •13.3. Добавление и удаление элемента
- •13.4 Случайные двоичные деревья поиска
- •14 Красно-чёрные деревья
- •14.1. Свойства красно-чёрных деревьев
- •14.2. Вращения
14.2. Вращения
Операции tree-insert и tree-delete выполняются на красно-чёрном) реве за время O(logn), но они изменяют дерево, и результат может не обла RB-свойствами, описанными в разделе 14.1. Чтобы восстановить эти своё надо перекрасить некоторые вершины и изменить структуру дерева.
Мы будем менять структуру с помощью вращений (rotations). Bpa представляет собой локальную операцию (меняется несколько указателей) храняет свойство упорядоченности. На рис. 14.2 показаны два взаимно обрат вращения: левое и правое. Левое вращение возможно в любой вершине х. пра ребёнок которой (назовём его у) не является листом (nil). После вращения y оказывается сверху, х становится левым ребёнком у, а бывший левый ребёнок j-j правым ребёнком х.

Рис. 14.2. Операции вращения на двоичном дереве поиска. Операция right-rotatk преобразует левое дерево в правое, меняя несколько указателей. Правое дерево можно перевести в левое обратной операцией left-rotate. Вершины х и у могут находиться в любом месте дерева. Буквы а, (3 и у обозначают поддеревья, В обоих деревьях выполнено одно и то же свойство упорядоченности: ключи из а предшествуют fcry[x], который предшествует ключам из {3, которые предшествуют key[y], который предшествует ключам из у.
В процедуре left-rotate предполагается, что right[x]<>nil.
left-rotate (T, x)
-
у <— right[x] > Находим у.
-
right[x] <— left[y] > Левое поддерево у становится
правым поддеревом х.
3 if left[y] <>NIL
4 then p[left[y}]<— x
-
p[y] <- p[x] > Делаем родителя x родителем у.
-
if p[x) = nil
-
then root[T] «- у
-
else if x = left\p[x]]
9 then /e/it[p[a:]] •<— у
10 else n<7/&£[p[:r]] •<— у
-
left[y]<— ,т о Делаем х левым ребёнком у.
-
p[x] <-y
