【问题标题】: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 月)维基百科中至少有一个图表有一个黑色节点。
如果这是一种混淆,将单节点情况明确排除为新规则可能会有所帮助。