Leetcode 96.不同的二叉搜索树

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

   1         3     3      2      1
           /     /      /       
     3     2     1      1   3      2
    /     /                        
   2     1         2                 3
二叉搜索树:左边节点都比根节点小,右边节点都比根节点大。
有规律可以得出是标准卡特兰数:
h(n) = h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)*h(0)  (n>=2)
h(n) = C(2n,n)/(n+1),n=0,1,2,3,... (其中C(2n,n)表示2n个物品中取n个的组合数)
class Solution {
public:
    int numTrees(int n) {
        if(n <= 1)
            return 1;
        int dp[n+1];
        memset(dp,0,sizeof(dp));
        dp[0] = 1;
        for(int i = 1; i <= n;++i)
        {
            int sum = 0;
            for(int j = 0;j < i; ++j)
                sum += dp[j] *dp[i-j-1];
            dp[i] = sum;
        }
        return dp[n];
    }
};
原文地址:https://www.cnblogs.com/Jawen/p/10816617.html