11082 完全二叉树的种类

11082 完全二叉树的种类

时间限制:1000MS  内存限制:1000K

题型: 编程题   语言: 无限制

Description

构造n个(2<=n<=20)叶结点的的完全二叉树(完全二叉树意味着每个分支结点都有2个儿子结点),有多少种构造方法?

 

注意:不改变n个结点的相对顺序,左右儿子不调换.

 

例如:

4个叶子节点A1,A2,A3,A4,可构造出如下完全二叉树,共5种。

 《11082 完全二叉树的种类》

 

再例如:5个叶子结点,A1,A2,A3,A4,A5,可构造出如下若干种完全二叉树形状,像这样的完全二叉树共有14种(下图并未全部列出).

 

 《11082 完全二叉树的种类》

Input

输入n,表示构造的完全二叉树有n个叶结点(2<=n<=20).

Output

输出构造的完全二叉树的种类.

Sample Input

5

Sample Output

14

Hint

把所有叶节点从左到右编上号:1,2,…,n。

无论怎样构造的完全二叉树,根节点左边的左子树和右边的右子树又都是完全二叉树,

那么n个节点的完全二叉树构造方法数等于左子树的构造方法数乘以右子树的构造方法数,

且要列举所有可能的左子树和右子树分布情况,而后所有情况方法数相加。假设左子树的叶子为1,…,i。

右子树的叶子就是:i+1,…,n。

 

设n个叶子的完全二叉树构造方法数为Total(n)。Total(n)的递归公式如下,这是Catalan数:

Total(n) = for i=1to n-1 sum(Total(i) * Total(n-i))    if n>=2

Total(n)=1    if n=1

 

考虑到计算Total(n)时,所有小于规模n的Total(n-1),…,Total(1)都可能被计算多次,

存在大量重复计算的问题。因此比较好的方法是对i从2到n,边计算Total(i),边用表记录下来,

即备忘录的方法,时间复杂度为O(n^2)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

源代码下载:http://download.csdn.net/detail/seanxu2012/5033722

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    原文作者:二叉树
    原文地址: https://blog.csdn.net/seanxu2012/article/details/8546956
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞