【问题标题】:behavior of red-black tree insert operation for sorted values排序值的红黑树插入操作的行为
【发布时间】:2017-03-16 22:39:19
【问题描述】:

我是数据结构的新手。我已经完成了红黑树插入算法的实现。我不明白,算法如何处理排序值的插入。

让我用数据集 [10, 5, 2] 来说明。

因此,将插入初始 10,并将其作为树的根,其颜色将为黑色。 10

接下来,我们将在根 10 下添加 5。5 的颜色将为红色(截至目前,它不违反任何属性)。

现在,我们将添加 2。添加后,树将如下所示:- 添加 2(其颜色为红色)将违反不允许红色父级下的红色子级的规则。红黑树中有3个案例:- 所有这三种情况都假设 parentOf(newlyInsertedNode) 有兄弟姐妹。但在我的情况下, parentOf(2) = 5 没有兄弟姐妹。那么,红黑树算法将如何处理这种情况。

【问题讨论】:

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


【解决方案1】:

红黑树的细节可能会因文章/书籍/实现而有所不同。

不过,Introduction To Algorithms (CLRS) 使用了一个非常常见的变体。在这个变体中,有特殊的NIL 子代。 NIL 子项包含一个特殊的“Null”键,表明它只是一片叶子。

RB 树的不变量是:

  1. 每个节点不是红色就是黑色。
  2. 根是黑色的。
  3. 每一片叶子 (NIL) 都是黑色的。
  4. 如果一个节点是红色的,那么它的两个子节点都是黑色的。
  5. 对于每个节点,从节点到后代叶子的所有简单路径都包含相同数量的黑色节点

请注意,特别是不变量 3 - NIL 节点是黑色的。


使用这个常见的变体,你的 RB 树有 4 个额外的节点:

  1. 10 的右孩子

  2. 5的右孩子

  3. 2的左右孩子

5 的右孩子是你缺少的兄弟姐妹。

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 2018-11-06
    • 2013-11-17
    • 2013-02-28
    • 2015-01-07
    • 2016-06-28
    • 2011-03-17
    • 2018-05-30
    相关资源
    最近更新 更多