解题思路
二叉搜索树要求左小右大
设G(n)是n个结点组成的二叉搜索树,
G(n) = G(1)+G(2)+……G(n)
设f(i)为以i为结点的树的个数
f(i) = G(i-1)*G(n-i)
联立得卡特兰数公式:G(n)=G(0)∗G(n−1)+G(1)∗G(n−2)+…+G(n−1)∗G(0)
初始化G(0)=G(1)=1
class Solution {
public int numTrees(int n) {
int []dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2;i<=n;i++){
for(int j=0;j<i;j++){
dp[i] += dp[j]*dp[i-1-j];
}
}
return dp[n];
}
}