红黑树插入:为啥插入时节点会变成红色?
Posted
技术标签:
【中文标题】红黑树插入:为啥插入时节点会变成红色?【英文标题】:Red Black Tree inserting: why make nodes red when inserted?红黑树插入:为什么插入时节点会变成红色? 【发布时间】:2013-03-05 07:00:33 【问题描述】:在红黑树属性中不包含任何插入节点颜色的规则,但我们总是插入红色节点。
如果我们插入黑色节点,它是否违反了任何属性(4 中的任何规则)?
【问题讨论】:
【参考方案1】:是的!假设你的树中有一个节点:
5 (black)
现在在树中插入一个新的黑色节点:
5 (black)
\
9 (black)
现在,树中的每个 root-null 路径都有相同数量的黑色节点的不变量被打破,因为从左根开始的路径有一个黑色节点,而从右根开始的路径各有两个。
希望这会有所帮助!
【讨论】:
简单优雅的答案!【参考方案2】:你似乎在问两个问题
1) 为什么插入节点时(在标题中)使节点变为红色?
2) 插入为黑色是否违反任何属性?
您似乎还误以为 2) 的肯定答案是 1) 的自动理由。
事实并非如此!将节点插入为红色 also 可能会违反 RB 树属性之一。例如,如果你让红色节点成为另一个红色节点的子节点,你就违反了红色节点只能有黑色子节点的属性。
将其设为红色的原因是,修复子节点属性(通过旋转和重新绘制父/祖父)“更容易”,而不是尝试修复路径长度属性。也许另一个原因是,这就是作者想出的。
也可以通过插入黑色节点而不重新绘制红色来修复树。也许还没有人考虑过。
【讨论】:
以上是关于红黑树插入:为啥插入时节点会变成红色?的主要内容,如果未能解决你的问题,请参考以下文章