【问题标题】:Red Black Tree ~ 1 Child Deletes红黑树~1子删除
【发布时间】:2016-02-08 04:26:52
【问题描述】:

一个红色的父节点是否有可能只有一个黑色的子节点?我一直在网上玩红/黑树模拟器,但我无法设法让这种情况发生。

问这个问题的原因是我相信我的代码中有一个不必要的 IF...

if (temp_node->color == BLACK && node->color == RED)
{
    node->color = BLACK;
    global_violation = false;
}

感谢您的任何反馈!

【问题讨论】:

    标签: c++ c data-structures red-black-tree


    【解决方案1】:

    不,这是不可能的。

    请记住,在红/黑树中,从树根离开树的所有路径必须经过相同数量的黑色节点(这是红/黑树不变量之一)。

    如果您有一个红色节点 x 和一个黑色子节点 y,则它不能有另一个红色子节点(因为这破坏了红色节点不能有红色子节点的红色/黑色不变量)。

    这意味着通过x 到丢失子节点的路径将比通过x 的路径至少少一个黑色节点,然后到y,然后从那里离开树,打破红色/黑树不变量。

    【讨论】:

      【解决方案2】:

      视情况而定。

      目前(2021 年 10 月)维基百科中至少有一个图表有一个黑色节点。

      如果这是一种混淆,将单节点情况明确排除为新规则可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-08-23
        • 2016-08-03
        • 2021-01-03
        • 2021-10-17
        • 2014-07-05
        • 2011-03-27
        • 2012-11-01
        • 2011-01-19
        相关资源
        最近更新 更多