我正在做一个独特的霍夫曼编码形式,我正在构建一个k-ary(在这种特殊情况下,3-ary)树已满(每个节点将有0或k个孩子),我知道有多少在我构建它之前它会有。如何根据叶数计算树中的节点总数?
我知道在完整二叉树(2-ary)的情况下,其公式为2L - 1,其中L是叶子数。我想将这个原则扩展到k-ary树的情况。
答案 0 :(得分:33)
考虑如何证明完整二叉树的结果,并且您将看到如何一般地完成它。对于完整的二叉树,例如高度h
,节点N
的数量为
N = 2^{h+1} - 1
为什么呢?由于第一级具有2^0
个节点,因此第二级具有2^1
个节点,并且通常k
级具有2^{k-1}
个节点。将这些添加到总共h+1
个级别(因此高度h
)会给出
N = 1 + 2 + 2^2 + 2^3 + ... + 2^h = (2^{h+1} - 1) / (2 - 1) = 2^{h+1} - 1
叶子总数L
只是最后一级的节点数,因此L = 2^h
。因此,通过替换,我们得到
N = 2*L - 1
对于k
- ary树,除2
之外没有任何变化。所以
N = 1 + k + k^2 + k^3 + ... + k^h = (k^{h+1} - 1) / (k - 1)
L = k^h
所以一些代数可以带你走最后一步
N = (k*L - 1) / (k-1)
答案 1 :(得分:0)
你提到的2L-1的公式来自于查看完整,完整和平衡的二叉树:在最后一级你有2 ^ h叶子,在其他级别:1 + 2 + 4 + .. .. + 2 ^(h-1)= 2 ^ h -1叶子。当您在树中“混乱”级别并创建不平衡级别时,您拥有的内部节点数量不会更改。
在3-ary树中它的逻辑相同:在最后一级你有3 ^ h叶子,而在其他级别:1 + 3 + 9 + .... + 3 ^(h-1)=( 3 ^ h -1)/ 2,这意味着在3-ary树上你有1.5 * L - 0.5叶子(这样就可以了 - 因为程度越大,你需要更少的内部节点)。我也在这里,当你弄乱树中的等级时,你仍然需要相同数量的内部节点。
希望它能帮到你
答案 2 :(得分:0)
对于任何k-ary树,节点总数n = [(k ^(h + 1)) - 1] /(h-1)其中h是k-ary树的高度。
Ex: - 对于完整的二叉树(k = 2)总数没有。节点= [(2 ^(h + 1)) - 1] /(h-1)。
所以对于身高3,总数没有。节点将是15。
对于完整的三元树(k = 3)总数没有。节点= [(3 ^(h + 1)) - 1] /(h-1)。
所以对于身高3,总数没有。节点将是40。