本人电子系,只为一学生。心喜计算机,小编以怡情。
给出 n,问由 1…n 为节点组成的不同的二叉查找树有多少种?
样例
给出n = 3,有5种不同形态的二叉查找树
总结:上网查了相关的资料,这是一道组合数学的问题
这是网上的相关资料,看了就能写出代码了。
public int numTrees(int n) {
// write your code
if(n==0)return 1;
int f[]=new int[n+1];//注意是n+1个长度
f[0]=1;//将第零个置1
///////////////////////////////////
//主体部分,根据递推式f2=f1+f1;
//f3=f2*f0+f1*f1+f0*f2;
//f4=f3*f0+f2*f1+f1*f2+f0*f3......等等
for(int k=1;k<=n;k++)//最外层是等式左边
{
int sum=0;
int head=0;
int tail=k-1;
for(int i=0;i<k;i++)//这个循环是等式右边,算出的累和赋值给sum
{
int linshi1=f[head++];
int linshi2=f[tail--];
sum+=linshi1*linshi2;
}
f[k]=sum;
}
return f[n];//返回要得到的数字
}