Красное-чёрное дерево

Материал из Public ATP Wiki
Перейти к: навигация, поиск
Пример КЧД

Красно-чёрное дерево(англ. red-black tree) - самобалансирующееся бинарное дерево поиска (англ. Binary Search Tree, BST) со следующими свойствами:

  1. Каждая вершина имеет цвет: красный или чёрный
  2. Корень дерева - чёрный
  3. У каждой нелистовой вершины ровно два ребёнка
  4. Все листья чёрные и фиктивные
  5. У красной вершины оба ребёнка чёрные
  6. Чёрная высота каждой вершины определена корректно

Чёрная высота

На пути от любой вершины красно-чёрного дерева до её потомка-листа одинаковое количество чёрных вершин.

Чёрная высота вершины $x$ (Обозначаем $bh(x)$) - количество чёрных вершин на пути от $x$ до любого её потомка-листа, не считая самого $x$.

Лемма 1
В поддереве вершины $x$ как минимум $2^{bh(x)} - 1$ вершин.
[развернуть]
Доказательство

Высота красно-чёрного дерева

Лемма 2
Если $T$ - красно-чёрное дерево, то $h(T) \leq log_2 (n + 1)$.
[развернуть]
Доказательство

Вставка

Рассмотрим, как поддерживать свойства красно-чёрного дереве при операции insert.

Производим вставку элемента в дерево как в любом BST и сразу красим его в красный цвет.

Тривиальные случаи

  • $x$ - новый корень КЧД. Тогда красим его в чёрный цвет для поддрежания 2 свойства КЧД.
  • Наш родитель $p$ - чёрный. Тогда вставка красного листа не нарушает свойств КЧД, а значит ничего делать не нужно.

Случай 1