Красное-чёрное дерево — различия между версиями
Строка 1: | Строка 1: | ||
[[File:rbtee_example.png|thumb|top|right|Пример КЧД]] | [[File:rbtee_example.png|thumb|top|right|Пример КЧД]] | ||
'''Красно-чёрное дерево'''(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами: | '''Красно-чёрное дерево'''(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами: | ||
+ | |||
# Каждая вершина имеет цвет: красный или чёрный | # Каждая вершина имеет цвет: красный или чёрный | ||
# Корень дерева - чёрный | # Корень дерева - чёрный | ||
Строка 7: | Строка 8: | ||
# У красной вершины оба ребёнка чёрные | # У красной вершины оба ребёнка чёрные | ||
# Чёрная высота каждой вершины определена корректно | # Чёрная высота каждой вершины определена корректно | ||
+ | |||
+ | <br> | ||
== Чёрная высота == | == Чёрная высота == | ||
Строка 39: | Строка 42: | ||
=== Тривиальные случаи === | === Тривиальные случаи === | ||
+ | |||
* $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД. | * $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД. | ||
* Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно. | * Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно. | ||
+ | |||
+ | Теперь если $p$ родитель $x$ оказался красным, то его родитель $gp$ обязан быть чёрным. Посмотрим на "дядюшку" $x$ - $u$. | ||
=== Случай 1 === | === Случай 1 === | ||
+ | |||
+ | [[File:rbtee_insert_case1.png|thumb|top|right|Первый случай]] | ||
+ | |||
+ | $u$ - Красный. |
Версия 16:35, 15 апреля 2020
Красно-чёрное дерево(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:
- Каждая вершина имеет цвет: красный или чёрный
- Корень дерева - чёрный
- У каждой нелистовой вершины ровно два ребёнка
- Все листья чёрные и фиктивные
- У красной вершины оба ребёнка чёрные
- Чёрная высота каждой вершины определена корректно
Содержание
[убрать]Чёрная высота
На пути от любой вершины красно-чёрного дерева до её потомка-листа одинаковое количество чёрных вершин.
Чёрная высота вершины $x$ (Обозначаем $bh(x)$) - количество чёрных вершин на пути от $x$ до любого её потомка-листа, не считая самого $x$.
Высота красно-чёрного дерева
Вставка
Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции insert.
Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет.
Тривиальные случаи
- $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
- Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.
Теперь если $p$ родитель $x$ оказался красным, то его родитель $gp$ обязан быть чёрным. Посмотрим на "дядюшку" $x$ - $u$.
Случай 1
$u$ - Красный.