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

Глава 10. Случай Деревьев поиска 1: Родной брат w V Темнокожий. (См. Рисунок 10.29.) в этом случае, двойное

красный обозначает факт, что мы создали в нашем красно-черном дереве T уродливую замену для передачи, с 4 узлами из (2, 4) дерево T, который имеет как его дети четыре темнокожих ребенка u, v, и z. У нашей уродливой замены есть один красный узел (v), который является родителем другого красного узла (z), в то время как мы хотим, чтобы у него было два красных узла как родные братья вместо этого. Чтобы решить эту проблему, мы выполняем реструктуризацию trinode T. Реструктуризация trinode сделана операцией, реструктурируют (z), который состоит из следующих шагов (см. снова рисунок 10.29; эта операция также обсуждена в Разделе 10.2):

• Возьмите узел z, его родительский v и прародителя u, и временно повторно маркируйте

их, поскольку a, b, и c, в слева направо заказывают, так, чтобы a, b, и c были

посещаемый в этом заказе inorder пересечением дерева.

• Замените прародителя u маркированным b узла и сделайте узлы a

и c дети b, сохраняя inorder отношения неизменными.

После выполнения реструктурирования (z) операция, мы окрашиваем b черный, и мы окрашиваем

a и c красный. Таким образом реструктуризация устраняет двойную красную проблему.

(a)

(b)

Рисунок 10.29: Реструктуризация красно-черного дерева, чтобы исправить двойной красный: (a) четыре

конфигурации для u, v, и z перед реструктуризацией; (b) после реструктуризации.

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

Случай 2: Родной брат w v Красный. (См. рисунок 10.30.) В этом случае, двойной красный

обозначает overflow в передаче (2, 4) дерево T. Чтобы решить проблему, мы выполняем эквивалент операции по разделению. А именно, мы делаем переокраску: мы окрашиваем v и w черный и их родительский u красный цвет (если u не корень, когда, это окрашено в черный). Возможно, что после такой переокраски двойная красная проблема вновь появляется, хотя выше в дереве T, так как у u может быть красный родитель. Если двойная красная проблема вновь появляется в u, то мы повторяем рассмотрение этих двух случаев в u. Таким образом переокраска или устраняет двойную красную проблему в узле z или размножает его прародителю u z. Мы продолжаем подниматься T, выступающий recolorings, пока мы наконец не решаем двойную красную проблему (или с переокраской финала или с trinode, реструктурирующим). Таким образом число recolorings, вызванного вставкой, является не больше, чем половиной высоты дерева T, то есть, не больше, чем зарегистрируйтесь (n + 1) Суждением 10.9.

(a)

(b)

Рисунок 10.30: переокраска, чтобы исправить двойную красную проблему: (a) перед переокраской

и передача, с 5 узлами в связанном (2, 4) дерево перед разделением; (b) после переокраски (и соответствующие узлы в связанном (2, 4) дерево после разделения).

Рисунки 10.31 и 10.32 показывают последовательность операций по вставке в красно-черном дереве.