Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 红黑树中最大和最小内部节点数?_Algorithm_Math_Data Structures_Red Black Tree - Fatal编程技术网

Algorithm 红黑树中最大和最小内部节点数?

Algorithm 红黑树中最大和最小内部节点数?,algorithm,math,data-structures,red-black-tree,Algorithm,Math,Data Structures,Red Black Tree,黑色高度为k的红黑树中的最小内部节点数为2k-1,如下图所示: 黑色高度为k的内部节点的最大数量为22k-1,如果黑色高度为2,则应为24-1=15。但是,请考虑这个图像: 内部节点数为7。我做错了什么?不确定我是否理解这个问题。 对于所有层(可能最后一层除外)具有最大项数的任何二叉树,我们将有2^(k-1)-1个内部节点,其中k是层数。在第二张图片中,您有4个层,因此内部节点的数量是2^(4-1)-1=7(我完全重写了这个答案,因为正如评论者所指出的,它最初是不正确的) 我认为使用这个方法

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

黑色高度为k的内部节点的最大数量为22k-1,如果黑色高度为2,则应为24-1=15。但是,请考虑这个图像:


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

不确定我是否理解这个问题。 对于所有层(可能最后一层除外)具有最大项数的任何二叉树,我们将有2^(k-1)-1个内部节点,其中k是层数。在第二张图片中,您有4个层,因此内部节点的数量是2^(4-1)-1=7(我完全重写了这个答案,因为正如评论者所指出的,它最初是不正确的)

我认为使用这个方法来思考这个问题可能会有所帮助。具体而言,具有黑色高度h的红黑树对应于具有高度h的2-3-4树,其中每个红色节点对应于多键节点中的键

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


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

阅读上述讨论后,如果我使用红色属性添加根,我添加的第二个节点将再次为红色,这将是一个红色冲突,并且在节点重组之后,我假设我们又达到了根黑和子红!我们可能无法获得(2^2k)-1个最大内部节点。
我是不是错过了什么,最近才开始做rbt

似乎您还没有考虑“黑叶子”(黑节点)——最后一级上每个红色节点的2个NIL节点。如果把NIL节点看作叶子,最后一个级别上的红色节点现在被计算为内部节点总计为15。

< P>你需要对树中的黑色零叶进行计数,如果不是这个公式不能工作的话。根不能是违反红黑树属性之一的红色

问题是你误解了黑色的高度。 红黑树中节点的黑色高度是指从当前节点到不计算当前节点的叶子的黑色节点数。(每个路线中的值相同)。 因此,如果你只是在每个红色节点上添加两片黑叶,你会得到一棵红黑树,黑高为2,内部节点为15


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

这里给出的树实际上有15个内部节点。最后一层中红色节点的NIL-black子节点丢失,它们实际上被称为外部节点(没有键的节点)。这棵树有2米高。具有黑色高度k的树的最大内部节点数的实际表达式为4^(k)-1。在这种情况下,结果是15。

在红黑树中,外部节点[null nodes]始终为黑色,但在第二棵树的问题中,您没有提到外部节点,因此您的计数为7,但如果您提到外部节点[null nodes]然后对内部节点进行计数,结果是15。

黑色高度是什么意思?第二张图中是否为
2
?我也没有得到第一张图片,那里面的黑色高度是多少?
2^(2*k)-1
,所以
2^(2*2)-1=2^4-1=8-1=7
假设黑色高度是指最深的黑色节点的高度。@Noctua-
2^4=16
。也许
2^(2k-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。