【问题标题】: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?

【问题讨论】:

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

标签: algorithm red-black-tree


【解决方案1】:

记住空值是黑色的。

事情是这样发生的:

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

【讨论】:

  • 我很感谢你的回答和你。太感谢了。你画的树否定了我的理论。
  • 案例4图片中的节点“U”看起来不像是空节点...
猜你喜欢
  • 2018-11-06
  • 2013-11-17
  • 1970-01-01
  • 2017-12-23
  • 2013-02-28
  • 2011-08-06
  • 1970-01-01
  • 2013-06-12
相关资源
最近更新 更多