2015-11-06 49 views
0

给出了完整和充分的二叉树ň节点的后代节点的平均数量,什么是后人一个节点的平均数?例如,根节点有n - 1个后代,每个叶节点有0个后代,但考虑到所有节点,平均值是多少?在一个完整的满二叉树

+0

为什么downvoting这个问题;它比许多问题如“如何将整数转换为Python中的字符串?”更有趣。当然,最初的海报本可以告诉我们为什么他/她问的是什么,他/她以前有什么第一个想法,但我赞成它在我身边(我试图在下面发表一个答案)。 –

回答

0

让我们改变一点你的问题了片刻:我们所说的“后代”将包括节点本身后代的数量。

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

对于K级别,您的树中显然有2^K-1节点;既然你叫这个值n,你有n = 2^K-1和K = log2(n + 1)。你有1^2(K-1)个节点(树叶)的后代,2 ^(K-2)个节点的3个后代,...直到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