LeetCode 20200129(不同的二叉搜索树)

1.不同的二叉搜索树
从递归角度来进行逐个计算
类似于斐波那契数列的计算方式
先考虑 0个结点 一种(空树)
1个结点 一种
2个结点的时候就是考虑 先固定一个结点作为根结点 然后分两种啊 一种是左子树结点数0右子树为1 另一种是 左为1右为0 节点为3,4,n的情况不断累加

class Solution {
        int numTrees(int n) {
        //dp[i]表示有i个结点时二叉树有多少种可能
        int[] dp = new int[n + 1];
        //初始化
        dp[0] = 1;
        dp[1] = 1;
        
        //因为计算dp[n]需要知道dp[0]--->dp[n-1]。所以第一层循环是为了求dp[i]
        for (int i = 2; i <= n; i++) {
            //当有i个结点时,左子树的节点个数可以为0-->i-1个。剩下的是右子树。
            for (int j = 0; j < i; j++) {
                dp[i] += dp[j] * dp[i - j - 1];
            }
        }
        return dp[n];
    }
};
发布了44 篇原创文章 · 获赞 9 · 访问量 3339

猜你喜欢

转载自blog.csdn.net/puying1/article/details/104106445
今日推荐