【发布时间】: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?
【问题讨论】:
-
哇,好问题。我真的很想看到一个详细的答案。
-
非常感谢,但我在任何地方都找不到明确的答案。