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

And*_*rew 30 math tree encoding character-encoding data-structures

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

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

Pen*_*One 38

考虑如何证明完整二叉树的结果,您将看到如何一般地完成它.对于完整的二叉树,比如高度h,节点的数量N

N = 2^{h+1} - 1

为什么?因为第一级具有2^0节点,所以第二级具有2^1节点,并且通常k第th级具有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
Run Code Online (Sandbox Code Playgroud)

叶子的总数L只是最后一级的节点数,所以L = 2^h.因此,通过替代,我们得到

N = 2*L - 1
Run Code Online (Sandbox Code Playgroud)

对于一k棵树,没有任何变化,但是2.所以

N = 1 + k + k^2 + k^3 + ... + k^h = (k^{h+1} - 1) / (k - 1)

L = k^h
Run Code Online (Sandbox Code Playgroud)

所以一些代数可以带你走最后一步

N = (k*L - 1) / (k-1)
Run Code Online (Sandbox Code Playgroud)