黑色高度为k的红黑树中最小内部节点数为2 k -1,如下图所示:
黑色高度为k的内部节点数量最多为2 2k -1,如果黑色高度为2,则应为2 4 - 1 = 15但是,请考虑这张图片:
内部节点的数量是7.我做错了什么?
答案 0 :(得分:9)
(我完全重写了这个答案,因为正如评论者指出的那样,它最初是不正确的。)
我认为使用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的完整二叉树中的节点数(因为如果你拉掉所有叶子,你将留下一个完整的树,比你开始时的树高一个)。这可以达到2 2h - 1 - 1,这与您给出的数字(我现在确信它是不正确的)不同,但与您获得的数字相匹配。
答案 1 :(得分:6)
如果不是这个公式不起作用,你需要计算树中的黑色NIL叶子。 root必须不是RED,这违反了Red-Black树的一个属性。
答案 2 :(得分:2)
问题是你误解了黑色的高度。 红黑树中节点的黑色高度是从当前节点到不计算当前节点的叶子的黑色节点的数量。 (这在每条路线中都是相同的值)。 因此,如果您只是为每个红色节点添加两个黑色叶子,您将获得一个红黑树,黑色高度为2,内部节点为15个。
(同样在红黑树中,每个红色节点都有两个黑人孩子,所以红色节点不能成为叶子。)
答案 3 :(得分:1)
在阅读上面的讨论之后,如果我添加带有红色属性的根,我添加的第二个节点将再次变为红色,这将是红色违规,并且在节点重组之后,我假设我们再次达到root black和孩子红!我们可能得不到(2 ^ 2k)-1个最大内部节点。 我在这里错过了一些东西,刚刚开始研究rbt ......
答案 4 :(得分:0)
似乎你没有考虑过“黑叶”(黑色节点) - 最后一级每个红色节点的2个NIL节点。如果将NIL节点视为叶子,则最后一级的红色节点现在计为内部节点,总计为15个。
答案 5 :(得分:0)
这里给出的树实际上有15个内部节点。最后一层中红色节点的NIL黑色子节点丢失,实际上称为外部节点(没有键的节点)。树的黑色高度为2.具有黑色高度k的树的最大内部节点数的实际表达式为4 ^(k)-1。在这种情况下,结果是15。
答案 6 :(得分:0)
在红黑树中,外部节点[空节点]总是黑色的,但是在第二个树的问题中,你没有提到外部节点,因此你的计数为7,但如果你提到外部节点[空节点]然后计算内部节点,你可以看到它结果是15。
答案 7 :(得分:-1)
不确定我理解这个问题。 对于任何二层树,其中所有层(除了最后一个)具有最大数量的项目,我们将具有2 ^(k-1)-1个内部节点,其中k是层数。在第二张图片中,您有4层,因此内部节点的数量是2 ^(4-1)-1 = 7