красное черное дерево - удаление элемента без муляжей

Я ищу руководство, как реализовать удаление элемента в красно-черном дереве без использования фиктивного узла (т.е. листовые узлы на самом деле являются нулевыми указателями). Все реализации, которые я нашел в google/wikipedia и стандартной литературе (sedgewick и cormen и др.), используют фиктивный NIL-узел, которого я хотел бы избежать.


person Krox    schedule 24.02.2011    source источник


Ответы (1)


Для вставки двойное красное устранение Окасаки работает из коробки. Вставьте, как обычно, в BST и продолжайте устранять двойные красные, пока не дойдете до корня.

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

Вот решение с код.

person cayhorstmann    schedule 12.05.2011