红黑树插入案例

Posted

技术标签:

【中文标题】红黑树插入案例【英文标题】:Red Black Tree Insertion Cases 【发布时间】:2018-05-30 23:44:33 【问题描述】:

这可能是一个非常简单的问题,但我找不到令人满意的答案。一个节点插入红黑树后,会遇到三种不同的情况:

新增节点=z

案例 1:z = red,z 的父母 = red,z 的叔叔 = red

案例 2:z = 红色,z 的父母 = 红色,z = 右孩子,z 的叔叔 = 黑色

案例 3:z = 红色,z 的父母 = 红色,z = 左孩子,z 的叔叔 = 黑色

但是,我认为我们不能直接进入案例 2 或案例 3,因为假设 x 和 y 分别是兄弟姐妹和红色和黑色。当我们在节点x下插入z时,不进入案例1就可以观察到案例2或案例3。但是,这意味着在添加节点z之前,红黑树是不平衡的,因为黑色高度规则已经被打破.

            Grandparent
             /       \
        x(red)       y(black)
        /   \         /   \
    nil(b) nil(b)  nil(b)  nil(b)

节点z可以添加到节点x的nil指针之一中,但是树不可能是这样的。每次插入后,红黑树必须平衡。

但是,我的算法教授拒绝了这个理论;因此,我无法确保这种情况。如果没有案例1,是否可以参与案例2或案例3?

【问题讨论】:

哇,好问题。我真的很想看到一个详细的答案。 非常感谢,但我在任何地方都找不到明确的答案。 【参考方案1】:

记住空值是黑色的。

事情是这样发生的:

           Grandparent
            /       \
        x(red)      nil(b)
        /   \     
    nil(b) nil(b) <-- z goes here

【讨论】:

我很感谢你的回答和你。太感谢了。你画的树否定了我的理论。 案例4图片中的节点“U”看起来不像是空节点...

以上是关于红黑树插入案例的主要内容,如果未能解决你的问题,请参考以下文章

红黑树平衡二叉查找树

红黑树平衡二叉查找树

数据结构之红黑树

红黑树

数据结构之红黑树

红黑树的插入与删除