根据叶子的数量,完整k-ary树中的节点总数是多少?

时间:2011-10-20 21:19:49

标签: math data-structures encoding character-encoding tree

我正在做一个独特的霍夫曼编码形式,我正在构建一个k-ary(在这种特殊情况下,3-ary)树已满(每个节点将有0或k个孩子),我知道有多少在我构建它之前它会有。如何根据叶数计算树中的节点总数?

我知道在完整二叉树(2-ary)的情况下,其公式为2L - 1,其中L是叶子数。我想将这个原则扩展到k-ary树的情况。

3 个答案:

答案 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。