在红黑树属性中不包含插入节点颜色的任何规则,我们总是插入红色节点。
如果我们插入黑色节点它是否违反了任何属性(4中的任何规则)?
答案 0 :(得分:10)
是的!假设树中有一个节点:
5 (black)
现在在树中插入一个新的黑色节点:
5 (black)
\
9 (black)
现在树的每个根空路径具有相同数量的黑色节点的不变量被打破,因为从左边的路径有一个黑色节点,而从右边的路径每个都有两个。
希望这有帮助!
答案 1 :(得分:4)
你似乎在问两个问题
1)为什么插入时节点会变红(标题中)?
2)插入黑色会违反任何属性吗?
您似乎也错误地认为2)的“是”答案是1)的自动理由。
事实并非如此!将节点插入为红色也可能会违反其中一个RB树属性。例如,如果您将红色节点作为另一个红色节点的子节点,则您刚刚违反了红色节点只能有黑色子节点的属性。
使其成为红色的原因是,“更容易”修复子节点属性(通过旋转和重新绘制父/祖父母),而不是尝试修复路径长度属性。也许另一个原因是,这就是作者提出的。
也可以通过插入黑色节点而不重新绘制红色来修复树。也许没有人考虑过它。