98
правок
Изменения
→Операции
== Операции ==
1. "Дядя" этого узла тоже красный. Тогда просто перекрашиваем "отца" и "дядю" в чёрный цвет, а "деда" - в красный. Проверяем, не нарушает ли он теперь балансировку. Если в результате этих перекрашиваний мы дойдём до корня, то в нём в любом случае ставим чёрный цвет.
[[Файл:D_2.png|275px|]]
# Если у вершины нет детей, то изменяем указатель на неё у родителя на nil.
# Если у неё только один ребёнок, то делаем у родителя ссылку на него вместо этой вершины.
Продолжаем тот же алгоритм, пока текущая вершина чёрная и мы не дошли до корня дерева. При удалении выполняется не более трёх вращений.
Найдём чёрные высоты деревьев. Предположим также, что <tex>bh[T_{1}] \geqslant bh[T_{2}]</tex>. Тогда в дереве <tex>T_{1}</tex> ищем среди чёрных вершин, имеющих чёрную высоту <tex>bh[T_{2}]</tex>, вершину y с наибольшим ключом. Пусть <tex>T_{y}</tex> — поддерево с корнем y. Объединяем это дерево с <tex>T_{2}</tex> в одно с красным корнем x. Теперь родителем вершины x становится бывший отец вершины y.
Осталось восстановить свойства красно-черного дерева, чтобы у красной вершины не было красных детей. Делается аналогично алгоритму добавления вершины.