Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

10.5. Красно-черные деревья 481

(a)

(b)

(c)

Рисунок 10.33: Реструктуризация красно-черное дерево, чтобы исправить двойную проблему с темнокожим населением: (a) и (b) конфигурации перед реструктуризацией, где r - правильный ребенок и связанные узлы в передаче (2, 4) дерево перед передачей (две других симметричных конфигурации, где r - покинутый ребенок, возможны); (c) конфигурация после реструктуризации и связанных узлов в передаче (2, 4) дерево после передачи. Серый цвет для узла x в частях (a) и (b) и для узла b частично (c) обозначает факт, что этот узел может быть окрашен или красный или черный.

482

Глава 10. Случай Деревьев поиска 2: Родной брат y r Темнокожий, и Оба Ребенка y Темнокожие. (См. Фигу -

ures 10.34 и 10.35.) Решение этого случая соответствует операции по сплаву в передаче (2, 4) дерево T. Мы делаем переокраску; мы окрашиваем r черный, мы окрашиваем y красный, и, если x красный, мы окрашиваем его в черный (рисунок 10.34); иначе, мы окрашиваем x дважды черным (рисунок 10.35). Следовательно, после этой переокраски, двойная проблема с темнокожим населением может вновь появиться в родительском x r. (См. рисунок 10.35.) Таким образом, эта переокраска или устраняет двойную проблему с темнокожим населением или размножает ее в родителя текущего узла. Мы тогда повторяем рассмотрение этих трех случаев в родителе. Таким образом, так как Случай 1 выполняет trinode реструктуризация операции и остановок (и, как мы будем скоро видеть, Случай 3 подобен), число recolorings, вызванного удалением, является не больше, чем регистрацией (n + 1).

(a)

(b)

Рисунок 10.34: переокраска красно-черного дерева, которое решает двойную проблему с темнокожим населением: (a) перед переокраской и соответствующими узлами в связанном (2, 4) дерево перед сплавом (другие подобные конфигурации возможны); (b) после переокраски и соответствующих узлов в связанном (2, 4) дерево после сплава.

10.5. Красно-черные деревья 483

(a)

(b)

Рисунок 10.35: переокраска красно-черного дерева, которое размножает двойной черный prob-lem: (a) конфигурация перед переокраской и соответствующими узлами в asso-ciated (2, 4) дерево перед сплавом (другие подобные конфигурации возможны); (b) конфигурация после переокраски и соответствующих узлов в связанном (2, 4) дерево после сплава.

484

Глава 10. Случай Деревьев поиска 3: Родной брат y r Красный. (См. Рисунок 10.36.) в этом случае мы выступаем

операция по регулированию, следующим образом. Если y - правильный ребенок x, позвольте z быть правильным ребенком y; иначе, позвольте z быть покинутым ребенком y. Выполните trinode, который реструктуризация операции реструктурирует (z), который делает y родителем x. Окрасьте y черный и x красный. Регулирование соответствует выбору различной репутации - resentation с 3 узлами в (2, 4) дерево T. После операции по регулированию родной брат r темнокожий, и или Случай 1 или Случай 2 применяются с различным значением x и y. Обратите внимание на то, что, если Случай 2 применяется, двойная проблема с темнокожим населением не может вновь появиться. Таким образом чтобы закончить Случай 3 мы подаем еще одну заявку или Случая 1 или Случая 2 выше, и мы сделаны. Поэтому, самое большее одно регулирование выполнено в операции по удалению.

(a)

(b)

Рисунок 10.36: Регулирование красно-черного дерева в присутствии двойной проблемы с темнокожим населением: (a) конфигурация перед регулированием и соответствующими узлами в связанном (2, 4) дерево (симметричная конфигурация возможна); (b) конфигурация после регулирования с теми же самыми соответствующими узлами в связанном (2, 4) дерево.