Всегда ли RBT заполнен?

#algorithm #graph #red-black-tree

#алгоритм #График #красно-черное дерево

Вопрос:

Насколько я понимаю, бинарные деревья не обязательно должны быть полными. Однако кажется, что RBT должны быть заполнены (иногда дочерние элементы равны нулю). Это правда, или я что-то упускаю?

Ответ №1:

Путь от корневого узла ко всем конечным узлам любого заданного красно-черного дерева имеет одинаковое количество черных узлов. В этом смысле, я полагаю, вы могли бы сказать, что красно-черные деревья всегда «заполнены», но я не вижу в этом очень полезного определения.

Общая идея красно-черного алгоритма заключается в ограничении фактической максимальной разницы в общей высоте конечных узлов (а не только высоты черного) между конечным узлом с кратчайшим общим путем и конечным узлом с самым длинным общим путем. Если вы используете это в качестве основы, то дерево RB является «полным», если все конечные узлы имеют одинаковую общую высоту (так же, как обычное двоичное дерево заполнено, если все листья имеют одинаковую глубину), и дерево RB не нужно заполнять.

Ответ №2:

Нет. Красно-черные деревья не всегда заполнены. На самом деле это редкое событие. Вы можете узнать больше об этом, прочитав книгу «Введение в алгоритмы» (Cormen, стр. 308), 3-е издание (в нем есть несколько рисунков, иллюстрирующих ответ на стр. 310, я не показываю их из-за авторских прав).