题目描述 Description
同学们都知道二叉树的定义,也都知道3个结点的二叉树有5种,
现给你二叉树的结点个数n,要你编程输出不同形态二叉树的种数。
输入描述 Input Description
一个整数n
输出描述 Output Description
不同形态二叉树的种数。
样例输入 Sample Input
3
样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
n<30
讨论过程:http://www.cnblogs.com/huashanqingzhu/p/5823166.html
http://www.cnblogs.com/hujunzheng/p/5040334.html
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 long long n,i; 6 long long h0=1,h1=1,h2; 7 cin>>n; 8 if(n==0||n==1) cout<<1<<endl; 9 else 10 { 11 for(i=2;i<=n;i++) 12 { 13 h2=(4*i-2)*h1/(i+1); 14 h1=h2; 15 //cout<<h2<<endl; 16 } 17 cout<<h2<<endl; 18 } 19 return 0; 20 }
另一个做法,思路不谋而合:
何泓历的代码:
1 #include <stdio.h> 2 long long a[21]={0}; 3 long long fun(int n) 4 { 5 if(n==1||n==0) return 1; 6 long long sum=0,i; 7 for(i=0;i<n;i++) 8 { 9 if(a[i]==0) a[i]=fun(i); 10 if(a[n-1-i]==0) a[n-1-i]=fun(n-1-i); 11 sum+=a[i]*a[n-1-i]; 12 } 13 return sum; 14 } 15 int main() 16 { 17 int n; 18 scanf("%d",&n); 19 printf("%lld\n",fun(n)); 20 return 0; 21 }