完整和完整二叉树中的后代节点的平均数

时间:2015-11-06 11:53:01

标签: binary-tree

给定具有 n 节点的完整且完整的二叉树,节点具有的平均后代数是多少?例如,根节点有 n - 1个后代,每个叶子节点有0个后代,但考虑到所有节点,平均值是多少?

1 个答案:

答案 0 :(得分:0)

让我们稍微改变你的问题 :我们称之为“后代”将是后代的数量,包括节点本身。

一片叶子有1个后代,它的父母有3个后代,然后是7个,然后是15个等等。这些数字是种类2 ^ k - 1,其中k是从树的底部开始的等级数(k = 1叶子)。

对于K级别,您的树中显然有2 ^ K-1个节点;因为你调用了这个值 n ,你有n = 2 ^ K-1和K = log2(n + 1)。

仍然像我之前所做的那样调用后代(稍后会看到你的确切问题),你有1个后代用于2 ^(K-1)个节点(叶子),3个后代用于2 ^(K-2)个节点, ...直到n ^ 2(KK)= 1节点的后代。

后代的平均数量为:

Sum(k=1,K,   2^(K-k) * (2^k-1) ) / n

根据您对“后代”的定义(不包括节点本身),您必须减去1:

Sum(k=1,K,   2^(K-k) * (2^k-1) ) / n - 1

通过替换K,你得到:

Sum(k=1,log2(n+1),    (2^k-1)(n+1) / 2^k ) / n - 1

使用Pari-GP程序,我输入:

f(n)=sum(k=1,round(log(n+1)/log(2)),  (2^k-1)*(n+1) / 2^k ) / n - 1

我得到了:

f(1)=0
f(3)=2/3
f(7)=10/7
f(15)=34/15

看起来像A036799(n) / n。如果序列实际上是相同的(我没有仔细检查),你可以编写更简单的表达式(没有总和):

f(n)= ((log(n+1)/log(2)-2)*(n+1)+2)/n