Leetcode 96.不同的二叉搜索树

ε祈祈猫儿з 提交于 2020-01-14 07:01:15
输入: 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];
    }
};

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!