Java 高度为K的树中可以包含的最大节点数?

Java 高度为K的树中可以包含的最大节点数?,java,tree,nodes,Java,Tree,Nodes,所以,我看的是一棵高度为8的树中的最大节点数 我相信正确的公式是2^(k+1)-1。因此,2^8+1-1=511。 我很困惑,因为我在网上看到了很多不同的答案和材料 有人能确认我是否正确/不正确并解释一下吗 提前谢谢我想你说的是二叉树,所以答案很简单。2^k-1,所以在你的例子中,2^8-1=255 以高度为k的树为例,如果添加新级别,则可以通过在每个叶中添加两个节点来复制节点数。如果取高度为1的树,它有1个节点,2^1-1;高度2,2^2-1=3…要验证你的答案,只需在一张纸上从K=1开始画出

所以,我看的是一棵高度为8的树中的最大节点数

我相信正确的公式是2^(k+1)-1。因此,2^8+1-1=511。 我很困惑,因为我在网上看到了很多不同的答案和材料

有人能确认我是否正确/不正确并解释一下吗
提前谢谢

我想你说的是二叉树,所以答案很简单。2^k-1,所以在你的例子中,2^8-1=255


以高度为k的树为例,如果添加新级别,则可以通过在每个叶中添加两个节点来复制节点数。如果取高度为1的树,它有1个节点,2^1-1;高度2,2^2-1=3…

要验证你的答案,只需在一张纸上从
K=1开始画出高度增加的树即可;这样,您就可以快速验证公式。您的意思是
2^(k+1)-1
?^是的,我更改了它。答案取决于节点可以处理的分支数。不必是,即具有两个分支的节点。它们可以有更多的分支。@Andreas我认为在这个例子中,一个节点可以处理两个分支。你能进一步解释一下你的意思吗?因此我对K=8的答案应该是2^8-1=255?谢谢,这个公式也可以用来计算一棵树的最小高度,比如85个节点。因为最小高度意味着每个节点有两个分支。简单地重新排列2^(k)-1=85,然后使用自然对数来分离k,行吗?@MD9是的,从技术上讲,你可以使用
log2(n+1)
,四舍五入,即对于
n=85
,你得到
ceil(log2(86))=7
。但是,通过调用使用位逻辑会更快。正如javadoc所显示的:
ceil(log2(x))=32-numberOfLeadingZeros(x-1)
,因此对于您来说,这将是
32-numberOfLeadingZeros(n+1-1)=32-numberOfLeadingZeros(n)
@MD9是的,使用您可以做的公式:log2(85+1)=6,4≈ 7.这是因为您使用的是公式,高度为6时,可以取2^6-1=63,高度为7时,可以取2^7-1=127。因此,由于公式是2^k-1=nodes,您可以执行log2(nodes+1)=k