【问题标题】:How many red nodes does a red-black-tree with black height bh(t) have(at most)?黑色高度为 bh(t) 的红黑树(最多)有多少个红色节点?
【发布时间】:2020-11-29 10:22:02
【问题描述】:

黑色高度为 bh(t) 的红黑树(最多)有多少个红色节点?

bh(t) = 任意简单路径上的黑色节点数

我们讲座中的一棵红黑树是一棵二叉搜索树

  1. 所有节点都有 2 个子节点(叶节点除外)
  2. 每个节点都是红色或黑色
  3. 根节点和所有叶子节点都是黑色的
  4. 红色节点的所有子节点都是黑色的
  5. 一个黑色节点最多可以有一个红色子节点
  6. 从根到叶的所有路径都有相同数量的黑色节点

我找不到答案。有人可以帮帮我吗?

【问题讨论】:

    标签: height red-black-tree


    【解决方案1】:

    我确实注意到这个定义比通常的定义更受限制:在标准定义中,要求 5 不存在,红色节点可以是兄弟节点。但是考虑到这个额外的限制,我们可以进行以下分析:

    • 唯一黑色高度为 0 的树是空树。
    • 唯一黑色高度为 1 的树是单个黑色节点(根和叶)

    首先想到的黑色高度为 2 的树如下:

                     b
                    / \
                   b   b
    

    我们可以选择这两个叶子中的一个来扩展为一个带有两个黑色子节点的红色节点:

                     b
                    / \
                   R   b
                  / \
                 b   b
    

    我们不能做得更多。没有办法注入第二个红色节点。这棵树的镜像是保持在您列出的约束范围内的唯一其他可能性,并且黑色高度为 2。

    此形状是递增到下一个黑色高度 3(或更大)的关键。我将这棵树称为T

    要生成一棵黑色高度为 3 的树,并具有尽可能多的红色节点,我们可以替换每个叶子(有 3 个)为 T时间>。结果是这样的:

                     _____ b_____
                    /            \
                   R              b
                 /   \           / \
               b       b        R   b
              / \     / \      / \
             R   b   R   b    b   b
            / \     / \
           b   b   b   b
    

    同样,我们可以镜像不同的子树,但是没有办法在黑色高度为 3 的树中获得更多的红色节点。

    现在考虑一下:在这个扩展中,我们用 T 替换了每个现有的叶子,并且由于 T 有一个红色节点,我们实际上添加了相同数量的红色节点有叶子。并且由于 T 有 3 个叶子,我们将叶子的数量乘以 3,这将决定我们将在下一次扩展时注入多少 T 树......等等。

    这给了我们一个递归关系——我写了 rh 来表示黑色高度树中红色节点的最大数量 h

    • r0 = 0
    • r1 = 0
    • r2 = 1
    • rh = 1 + 3rh-1

    在一个直接公式中,最后一个等式变为:

    • rh = ∑i=1..h-2 3i

    这样的和可以重写为以 3 为基数的 1 位数字的重复,因此我们可以推导出:

    • rh = (3h-1 - 1) / 2

    这个公式对于 h=1h=2 也给出了正确的结果,所以我们只需要添加 h=0 的情况em>:

    • r0 = 0
    • rh = (3h-1 - 1) / 2,当 h > 0

    这是一个包含前几个结果的表格:

    black height (h) | max number of red nodes (r[h])
    -----------------+----------------------------------------
               0     |     0
               1     |     0
               2     |     1
               3     |     4
               4     |    13
               5     |    40
               6     |   121
               7     |   364
               8     |  1093
              ...    |   ...
               h     |  (3^(h-1) - 1) / 2 
    

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 2013-02-09
      • 1970-01-01
      • 2011-09-18
      • 2014-03-16
      • 2017-02-10
      • 2017-03-02
      • 2021-07-04
      • 2011-04-23
      相关资源
      最近更新 更多