上路了

来源:互联网 发布:杭州淘宝美工工资 编辑:程序博客网 时间:2024/06/10 15:07

周末结束了,明天又是一个新的开始.

二叉树的计数问题就是讨论具有n个节点,互不相似的二叉树的数目bn.
一般情况下一颗具有n(n>1)个节点的二叉树可看成是一个根结点,一颗有i个结点的左子树,一颗具有n-i-1个结点的右子树组成.由此可得以下递推公式:
①:b0=1;
②:bn=b0*b1+b1*b2+...+bn-2*bn-1    -----------记为公式A
对序列b0,b1,...,bn,...定义生成函数
B(z)=b0+b1*z+b2*z^2+...+bn*z^n+...则
B^2(z)=b0*b0+(b0*b1+b1*b2)+(b0*b2+b1*b1+b2*b0)z^2+...
=>zB^2(z)=B(z)-1
解一元二次方程得
B(z)=(1-sqrt(1-4*z))/2/z
用二项式展开有:
B(z)=1+z+2*z^2+5*z^3+14*z^4+42*z^5+...   -----------记为公式B
比较公式A与公式B有
b(n)=C(n,2n)/(n+1)=C(n,2n)-C(n-1,2n)

证明应该很清楚吧
书上给了两种证明,我比较喜欢数学式的证明,另一种逻辑成分更多一些:
不同的二叉树所得的中序序列不同,因此,不同形态的二叉树的数目恰好是前序序列均为12...n的二叉树所能得到的中序序列的数目.而中序遍历的过程实质上是一个结点进栈和出栈的过程,这个数目为:
C(n,2n)-C(n-1,2n)=C(n,2n)/(n+1)

其中第二种的组合解释还不是很明白!

原创粉丝点击