红黑树插入:插入时为什么要使节点变红?

时间:2013-03-16 16:07:53

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

在红黑树属性中不包含插入节点颜色的任何规则,我们总是插入红色节点。

如果我们插入黑色节点它是否违反了任何属性(4中的任何规则)?

2 个答案:

答案 0 :(得分:10)

是的!假设树中有一个节点:

    5 (black)

现在在树中插入一个新的黑色节点:

    5 (black)
     \
      9 (black)

现在树的每个根空路径具有相同数量的黑色节点的不变量被打破,因为从左边的路径有一个黑色节点,而从右边的路径每个都有两个。

希望这有帮助!

答案 1 :(得分:4)

你似乎在问两个问题

1)为什么插入时节点会变红(标题中)?

2)插入黑色会违反任何属性吗?

您似乎也错误地认为2)的“是”答案是1)的自动理由。

事实并非如此!将节点插入为红色可能会违反其中一个RB树属性。例如,如果您将红色节点作为另一个红色节点的子节点,则您刚刚违反了红色节点只能有黑色子节点的属性。

使其成为红色的原因是,“更容易”修复子节点属性(通过旋转和重新绘制父/祖父母),而不是尝试修复路径长度属性。也许另一个原因是,这就是作者提出的。

也可以通过插入黑色节点而不重新绘制红色来修复树。也许没有人考虑过它。