红黑树~1个孩子删除

时间:2016-02-08 04:26:53

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

红色父节点是否有可能只有一个黑色子节点?我一直在网上玩Red / Black Tree模拟器,我无法设法解决这个问题。

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

#hero4:hover {
  background-color: grey;
}

感谢任何反馈!!

2 个答案:

答案 0 :(得分:5)

不,这是不可能的。

请记住,在红色/黑色树中,树的根部之外的所有路径都必须通过相同数量的黑色节点(即红色/黑色树不变量之一)。

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

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

答案 1 :(得分:0)

是的,有可能。在以下情况下,您可以拥有一个带有单个黑人孩子的红色节点而又不违反任何规则:

步骤1)插入:10、7、40、3、8、30、45、1、5、20、35、60、25。以下显示删除节点30之前的红黑树:

Red-black tree BEFORE deletion of node 30

第2步)删除30(一个2度红色节点)。下面显示了删除节点30之后的红黑树:

Red-black tree AFTER deletion of node 30

假设替换策略至少在右侧子树中,则替换30的节点为35。

现在,当您确实替换节点时,我相信替换节点也将继承被替换节点的颜色。这意味着35是红色。

这将产生一棵树,其中35是一个带有单个黑人孩子的红色节点。