Algorithm 给定n个节点上的红黑树,任何根到叶路径上的最大红色节点数是多少?
这是一个问答题。我不确定我的回答是否正确。请帮帮我 假设高度是h,因为没有两个连续的节点(当我们向树的上方)可以是红色的,那么红色节点的最大数量不是h/2吗?(h=对数n) 不知何故,我觉得这不是正确的答案 如有任何帮助/意见,将不胜感激Algorithm 给定n个节点上的红黑树,任何根到叶路径上的最大红色节点数是多少?,algorithm,binary-tree,binary-search-tree,red-black-tree,Algorithm,Binary Tree,Binary Search Tree,Red Black Tree,这是一个问答题。我不确定我的回答是否正确。请帮帮我 假设高度是h,因为没有两个连续的节点(当我们向树的上方)可以是红色的,那么红色节点的最大数量不是h/2吗?(h=对数n) 不知何故,我觉得这不是正确的答案 如有任何帮助/意见,将不胜感激 提前非常感谢 **编辑**此答案假设高度定义为从根到叶(使用,例如in)的最长路径中的节点数,包括“虚拟”黑叶节点。更常见的定义统计边的数量,不包括叶节点。根据此定义,答案是圆形(h/2),如果将叶节点包括到高度圆形(h/2)**编辑结束** 如果遵循中的根节
提前非常感谢 **编辑**此答案假设高度定义为从根到叶(使用,例如in)的最长路径中的节点数,包括“虚拟”黑叶节点。更常见的定义统计边的数量,不包括叶节点。根据此定义,答案是
圆形(h/2)
,如果将叶节点包括到高度圆形(h/2)
**编辑结束**
如果遵循中的根节点为黑色的规则,则正确答案是小于h/2的最大整数。这只是因为根和叶是黑色的,中间的一半节点(向上舍入)可以是红色的。即圆形((h-2)/2)
你也可以通过考虑一些不同高度的红黑小树来找到规则
案例h=1
根为黑色->0个红色节点
案例“h=2”根为黑色,叶为黑色->0个红色节点
Caseh=3
根是黑色,第二级可以是红色,叶子必须是黑色->最大1个红色节点
Caseh=4
根是黑色的,第二级可以是红色,第三级必须是黑色,叶子必须是黑色->最大1个红色节点
案例h=5
黑、红、黑、红、黑->最多2个红色节点
作为
n
函数的h
更为复杂,但可以显示h=h/2
。现在使用这些结果,我们得到n>=2^bh(x)-1>=2^(h/2)-1
。通过求解h
,我们得到了答案h让我们首先看看需要多少节点(最小化n)来创建一个具有1个红色节点的路径(*
为黑色):
因此,当需要1个红色节点时,n必须至少为5。它有3个叶节点和2个内部节点。删除任何节点都需要删除红色节点,并将其保留在内部
如果要扩展此树以获得具有2个红色节点的路径,可以应用以下两个步骤:
所有的叶子都有两个黑色的孩子
最右边的叶子(刚刚添加)变成了一个红色节点,它得到了两个黑色子节点
美元符号是与上一棵树相比添加的黑色节点:
*
/ \
* R
/| / \
$ $ * *
/| / \
$ $ $ R
/ \
$ $
我们选择将红色节点放置在右侧的路径;这种选择不影响结论。请注意,在其他较短路径中添加红色节点没有任何帮助,因为这只会增加节点数,而不会增加红色节点最多的路径
在步骤1中,叶节点(L)的数量加倍,而作为叶的节点变为内部节点(I)。
第二步将内部节点数和叶数都增加为1。更正式地说,我们可以找到这些公式,其中索引r表示红色节点的数量:
L1=3
I1=2
Lr+1=2Lr+1
Ir+1=Ir+Lr+1
将增加r的表格放入:
我们可以看到以下事实:
Lr=2r+1-1
Ir=2r+1-2
因此:
nr=2r+2-3
所以我们有一个公式,可以知道一条有r个红色节点的路径所需的最小节点数。我们需要一个不同的关系:当给定n时,r的最大值
从上面我们可以得出:
r=⌊ log2(n+3)⌋ - 2路径上红色节点的最大数量为h/2,但h可以大于log_2 N。那么h是多少?我们如何用n来表达它?@MarkJ我更新了关于高度的讨论,用n
。是一棵高2的RB树。为什么这些红色节点不存在?@MichaelFoukarakis我对高度的定义似乎不标准/错误。看到编辑了,我看到了。如果你考虑黑色高度,那么归纳证明可能会更容易。
*
/ \
* R
/| / \
$ $ * *
/| / \
$ $ $ R
/ \
$ $
r | L | I | n=L+I
----+-----+-----+-------
1 | 3 | 2 | 5
2 | 7 | 6 | 13
3 | 15 | 14 | 29
4 | 31 | 30 | 61
... | ... | ... | ...