【问题标题】:red black tree insertion红黑树插入
【发布时间】:2013-11-17 05:37:14
【问题描述】:

我在红黑树中插入了节点 36,结果如下红黑树:

我的问题是在这种特殊情况下如何处理双红?是情况2还是3?

【问题讨论】:

  • 我想您的意思是再平衡操作列表中的第 2 或第 3 种情况,但您应该知道每个人的编号都不相同(更不用说规则了)。我能给你的唯一一般经验法则是:第一个适合的规则。

标签: algorithm data-structures red-black-tree-insertion


【解决方案1】:

22 没有左孩子

所以..

案例 1:重组

我们会左转

30 --> 根“黑色”

22--> 左孩子“红色”

36-->右孩子“红”

【讨论】:

    【解决方案2】:

    基于Wikipedia的属性和案例...

    36 将插入到 case 5 下,向左旋转 22

    父母P是红色的,但叔叔是黑色的或不在。

    维基百科只是说“叔叔是黑人”,但是,看看代码,你会看到那个案例触发了。


    请注意,没有36 的树已经无效,因为属性 5(从任何给定节点到其叶节点的所有路径都包含相同数量的黑色节点):

    • 20 到 15 包含 1 个黑色节点
    • 20 到 30 包含 2 个黑色节点

    假设插入顺序为20, 15, 22, 30, 36...

    所有节点都插入为红色。

    22 将插入到 case 2 下。

    父母是黑人。

    30 将被插入到 case 3 下,使 2215 黑色和 20 红色。

    父母和叔叔是红色的;两者都被重新漆成黑色,祖父母变成红色。

    36 将插入到 case 5 下,向左旋转 22

    父母P是红色的,但叔叔是黑色的或不在。

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 2018-05-30
      • 1970-01-01
      • 2017-12-23
      • 2013-02-28
      • 2011-08-06
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多