红黑树插入:为啥插入时节点会变成红色?

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 树属性之一。例如,如果你让红色节点成为另一个红色节点的子节点,你就违反了红色节点只能有黑色子节点的属性。

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

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

【讨论】:

以上是关于红黑树插入:为啥插入时节点会变成红色?的主要内容,如果未能解决你的问题,请参考以下文章

红黑树平衡二叉查找树

红黑树的插入操作过程详细图解

数据结构——红黑树

红黑树插入案例

学习笔记:红黑树

红黑树