给定一个整数 n ,求以 1 … n 为节点组成的二叉搜索树有多少种?
<strong>输入:</strong> 3
<strong>输出:</strong> 5
<strong>解释:
</strong>给定 <em>n</em> = 3, 一共有 5 种不同结构的二叉搜索树:
1 3 3 2 1
/ / / / / /
3 2 1 1 3 2
/ / / /
2 1 2 3
当有n个节点时( 1 –n),任何一个数都可以当成根节点,左边j个节点,右边是n-j- 1 个节点 所以就有nums[n] = nums[ 0 ]*nums[n]+nums[ 1 ]*nums[n- 1 ]+nums[ 2 ]*nums[n- 2 ]+ … +nums[n]*nums[ 0 ]; 因此我们需要先求出nums[ 0 ]–nums[n- 1 ] 最后返回nums[n]即可。
class Solution {
public int numTrees(int n) {
if(n<=0)
return 0;
int[] res = new int[n+1];
res[0] = 1;
res[1] = 1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<i;j++)
{
res[i] += res[j]*res[i-j-1];
}
}
return res[n];
}
}