【问题标题】:Largest and smallest number of internal nodes in red-black tree?红黑树中最大和最小的内部节点数?
【发布时间】:2013-10-21 10:18:54
【问题描述】:

黑色高度为k的红黑树内部节点的最小数量为2k-1,即下图中的1个:

黑色高度为k的最大内部节点数为22k-1,如果黑色高度为2,则应为24 - 1 = 15 . 但是,考虑一下这张图片:

内部节点数为7。我做错了什么?

【问题讨论】:

  • black height 是什么意思?第二张图片中是2吗?我也没有得到第一张图片,那里面的黑色高度是多少?
  • 2^(2*k) - 1,所以2^(2*2) - 1 = 2^4 - 1 = 8 - 1 = 7 假设黑色高度是指最深黑色节点的高度。
  • @Noctua - 2^4 = 16.
  • 可能是2^(2k - 1) - 1
  • 第一棵树的叶子应该是红色的吗?

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


【解决方案1】:

(我已经完全重写了这个答案,因为正如评论者所说,它最初是不正确的。)

我认为使用isometry between red-black trees and 2-3-4 trees 来思考这个问题可能会有所帮助。具体来说,黑色高度为h的红黑树对应高度为h的2-3-4树,其中每个红色节点对应多键节点中的一个键。

这种联系使我们更容易做出一些巧妙的观察。首先,底层的任何 2-3-4 树节点都对应一个黑色节点,没有红色子节点、一个红色子节点或两个红色子节点。这些是红黑树中唯一可以成为叶节点的节点。如果我们想最大化树中的总节点数,我们想让 2-3-4 树只有 4 个节点,它(在等距下)映射到一个红/黑树,其中每个黑色节点有两个红色的孩子。一个有趣的效果是它使树层的颜色在黑色和红色之间交替,顶层(包含根)是黑色的。

本质上,这归结为计算高度为 2h - 1 的完整二叉树中内部节点的数量(2h 层在黑色和红色之间交替)。这等于高度为 2h - 2 的完整二叉树中的节点数(因为如果你拔掉所有的叶子,你会得到一棵高度比你开始时低 1 的完整树)。计算结果为 22h - 1 - 1,这与给您的数字不同(我现在确信这是不正确的),但与您得到的数字相匹配。

【讨论】:

  • +1。我想当然地认为他发布的树有最大数量的内部节点。
  • 我想我不能很好地表达它,在第二张图像中黑色高度是 1 所以如果我们按照公式我们有 2^2-1 其中 3 所以这意味着有 3 个内部节点但是你可以看到有7个
  • @user2860721- 我认为您对“黑色高度”的定义是错误的。红黑树的黑色高度是从根到叶子的任意路径上黑色节点的数量,而不是最高黑色节点的高度。 (如果你知道2-3-4树的连接,红黑树的黑色高度就是2-3-4树对应红黑树的高度)。这有意义吗?
  • 谢谢,所以我可以得到 2^4-1=15 但这是节点总数而不是内部节点但我们总是说 2^2k-1 是内部节点的数量我错了吗?
  • @user2860721 - 您发布的图片没有最大可能的内部节点数,即 15。
【解决方案2】:

如果不是这个公式不起作用,您需要计算树中的黑色 NIL 叶子。根不能是违反红黑树属性之一的 RED。

【讨论】:

    【解决方案3】:

    问题是您误解了黑色高度。 红黑树中节点的黑色高度是从当前节点到叶子的黑色节点数,不包括当前节点。 (这在每条路线中都是相同的值)。 因此,如果您只为每个红色节点添加两个黑色叶子,您将得到一棵黑色高度为 2 和 15 个内部节点的红黑树。

    (同样在红黑树中,每个红色节点都有两个黑色子节点,因此红色节点不能是叶子。)

    【讨论】:

      【解决方案4】:

      看了上面的讨论,所以如果我添加了带有红色属性的根,我添加的第二个节点将再次变成红色,这将是红色违规,并且在节点重组后,我假设我们再次到达根黑色并且孩子红!我们可能无法获得 (2^2k)-1 个最大内部节点。 我在这里遗漏了什么吗,最近才开始研究 rbt ...

      【讨论】:

        【解决方案5】:

        您似乎没有考虑过“黑叶”(黑节点)——最后一层上每个红节点的 2 个 NIL 节点。如果您将 NIL 节点视为叶子,则最后一层的红色节点现在被计为内部节点,总计 15 个。

        【讨论】:

          【解决方案6】:

          这里给出的树实际上有 15 个内部节点。最后一层红色节点的 NIL 黑色子节点缺失,实际上称为外部节点(没有密钥的节点)。树的黑高为 2。黑高为 k 的树的最大内部节点数的实际表达式为 4^(k)-1。在这种情况下,结果是 15。

          【讨论】:

            【解决方案7】:

            在红黑树中,外部节点[空节点]始终为黑色,但在第二棵树的问题中,您没有提到外部节点,因此您的计数为 7,但如果您提到外部节点 [空节点] 然后计算内部节点,你可以看到结果是 15。

            【讨论】:

              【解决方案8】:

              不确定我是否理解这个问题。 对于所有层(除了最后一层)都具有最大项目数的任何二叉树,我们将有 2^(k-1)-1 个内部节点,其中 k 是层数。在第二张图片中,您有 4 层,因此内部节点数为 2^(4-1)-1=7

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-03-16
                • 2017-02-10
                • 2012-11-03
                • 2021-02-18
                • 2017-06-27
                • 2015-11-17
                • 2014-01-13
                • 2020-11-29
                相关资源
                最近更新 更多