红黑树插入案例
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”看起来不像是空节点...以上是关于红黑树插入案例的主要内容,如果未能解决你的问题,请参考以下文章