Предположим, у вас есть красно-черное дерево, которое является действительным двоичным деревом поиска и не нарушает ни одно из этих правил:
- Узел либо красный, либо черный.
- Корень черный.
- Все листья (NIL) черные.
- Оба ребенка каждого красного узла черные.
- Каждый простой путь от данного узла к любому из его потомков оставляет одно и то же количество черных узлов.
Такое красно-черное дерево выглядит так:
Имеет ли каждое возможное дерево, отвечающее этим ограничениям, последовательность вложений и удалений, так что генерируется красно-черное дерево?
Я задаю этот вопрос, потому что я думаю о написании статьи в блоге о красно-черных деревьях, и я хотел бы привести несколько примеров.
Если вы хотите протестировать контрпример: Вот реализация красно-черного дерева в python с реализованной функцией для генерации изображения.
Чтобы прояснить вопрос: мы делаем игру.
- Я рисую красно-черное дерево, которое соответствует всем ограничениям.
- Вы должны найти последовательность вложений и удалений, чтобы вы закончили с моим красным черным деревом.
Могу ли я рисовать красно-черное дерево, чтобы вы не смогли победить?
Цвета важны! Если дерево имеет другую форму или разные цвета, это не одно и то же красно-черное дерево.
Вы должны хотя бы знать, как сгенерировать эти два красно-черных дерева:
Обратите внимание, что это только проверка для вас, если она может работать. Если вы только знаете, как получить эти два красно-черных дерева, вы не можете ответить на этот вопрос!