163. 不同的二叉查找树
给出 n,问由 1...n 为节点组成的不同的二叉查找树有多少种?
样例
样例 1:
输入:n = 3
输出:5
解释:有5种不同形态的二叉查找树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
int fn(int n)
{
if(n == 0 || n ==1)
{
return 1;
}
if(n==2)
{
return 2;
}
int sum = 0;
if(n % 2 == 0)
{
for(int i=0; i<n/2;i++)
{
sum += fn(i) * fn(n-1-i);
}
sum *=2;
}
else
{
for(int i=0; i<n/2;i++)
{
sum += fn(i) * fn(n-1-i);
}
sum *=2;
sum += fn(n/2) * fn(n/2);
}
return sum;
}