给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
 
  
 算法:动态规划。我们用f[i]表示i个结点的BST有多少种。那么左子树可能为0,1,...n-1。对应的右子树则为n-1,...0。根据排列组合知,总数为f[k]*f[n-k-1]求和。
 
  
  class Solution {
public:
    int numTrees(
int n) {
        vector<
int>f(n+
1);
        f[0]=
1;
        for(
int i=
1;i<=n;i++
){
            f[i]=
0;
            for(
int j=
1;j<=i;j++
)
                f[i]+=f[j-
1]*f[i-
j];
        }
        return f[n];
    }
}; 
  
  
 
转载于:https://www.cnblogs.com/programyang/p/11166704.html