По определению R / B деревья могут быть немного менее сбалансированными, чем AVL-s, так как | maxPath - minPath | должно быть <= 1 для AVL и maxPath <= 2 * minPath для R / B, так что не каждый R / B является AVL, но с другой стороны, для AVL не нужно иметь пустые поддеревья, поэтому </p>
4
/ \
3 6
/\ /\
1 E 5 8
- это совершенно законный AVL, и он не является R / B, потому что R / B не может содержать листья и должен заканчиваться пустыми деревьями, которые всегда окрашены в черный цвет, так что вы не можете раскрасить дерево выше.
Чтобы сделать это R / B, вам разрешено конвертировать каждый лист x в узел E x E
и затем следуйте этим правилам:
Дерево R / B:
Должен быть BST
должен содержать только узлы и пустые деревья, которые окрашены в черный или красный цвет
Каждый красный узел имеет черных детей
Все пустые деревья черные
Для данного узла все пути к пустым деревьям должны иметь одинаковое количество черных узлов.
Любой лист можно заменить узлом, левые и правые поддеревья которого пусты
Макс. Путь T ≤ 2 * Мин. Путь T
Кстати, только что понял, что это покрасило мои узлы и листья в красный - это не было предназначено.
Karol