一个红色的节点在红黑树中只有一个黑人孩子吗?

时间:2016-02-22 05:02:00

标签: data-structures binary-tree binary-search-tree proof red-black-tree

红黑树的规则:

  1. 每个节点都是红色或黑色。
  2. 根是黑色的。
  3. 每片叶子(NIL)都是黑色的。
  4. 如果节点为红色,则其子节点均为黑色。
  5. 对于每个节点,从节点到后代叶子的所有简单路径都包含相同数量的黑色节点。
  6. 规则4提到红色节点需要两个黑人孩子但是如果只有一个孩子可以开始呢?是否存在证明或反驳这一点的论据?

2 个答案:

答案 0 :(得分:0)

不,红色节点不能有一个孩子,请考虑以下情况: - 1.如果单个孩子是红色的......这是不可能发生的,因为没有两个连续的节点可以是红色的。 2.如果孩子是黑人......再次发生这种情况是不可能的,因为这会违反“黑色高度规则”......这种情况会在路径中给出一个额外的黑色节点,根据规则。

答案 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是一个带有单个黑人孩子的红色节点。