Красное-чёрное дерево — различия между версиями
Строка 32: | Строка 32: | ||
}} | }} | ||
− | == | + | == Вставка == |
Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции ''insert''. | Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции ''insert''. | ||
− | [[File:rbtree_insert.png|thumb| | + | [[File:rbtree_insert.png|thumb|upright=0.5|top|left|Сразу после insert]] |
Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет. Вставленный элемент - $z$, рассмотрим его "дядюшку" $y$ и разберём случаи, в которых после такой вставки могут нарушиться свойства нашего дерева. | Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет. Вставленный элемент - $z$, рассмотрим его "дядюшку" $y$ и разберём случаи, в которых после такой вставки могут нарушиться свойства нашего дерева. |
Версия 15:44, 15 апреля 2020
Красно-чёрное дерево(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:
- Каждая вершина имеет цвет: красный или чёрный
- Корень дерева - чёрный
- У каждой нелистовой вершины ровно два ребёнка
- Все листья чёрные и фиктивные
- У красной вершины оба ребёнка чёрные
- Чёрная высота каждой вершины определена корректно
Чёрная высота
На пути от любой вершины красно-чёрного дерева до её потомка-листа одинаковое количество чёрных вершин.
Чёрная высота вершины $x$ (Обозначаем $bh(x)$) - количество чёрных вершин на пути от $x$ до любого её потомка-листа, не считая самого $x$.
Высота красно-чёрного дерева
Вставка
Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции insert.
Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет. Вставленный элемент - $z$, рассмотрим его "дядюшку" $y$ и разберём случаи, в которых после такой вставки могут нарушиться свойства нашего дерева.