LeetCode第96题不同的二叉搜索树

继续打卡算法题,今天学习的是LeetCode第96题不同的二叉搜索树,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

本题是给一个数n,求这个数可以组成不同的二叉树,由于二叉搜索树的特性,左子树小于根节点,右子树大于根节点。

那么组成的二叉树总数是分别是由 1到n为根节点可以组成的二叉树的总数。

比如n=3,分别需要求:

根为1可以组成的二叉树

根为2可以组成的二叉树

根为3可以组成的二叉树

而求根为i可以组成的二叉树数目,它等于i-1 和 n-i个节点可以组成的树数目之积。 我们可以得到递推公式:

dp[n] + = dp[i-1] * dp[j-i]

本题解题技巧

1、根据二叉树特性,推导递推公式

编码解决

java 复制代码
class Solution {
    public int numTrees(int n) {

        int[] dp = new int[n+1];

        dp[0] = 1;
        dp[1] = 1;

        //求数字i可以组成dp[i]个二叉树
        for(int i=2; i<=n; i++) {
            //求以j为根,可以组成多少二叉树
            for(int j=1; j<=i; j++) {
                dp[i] += dp[j-1] * dp[i-j];
            }

        }

        return dp[n];

    }
}

总结

1、本题属于动态规划题目,需要理解递推公式推演的脉络。

相关推荐
闪电麦坤9536 分钟前
Leecode热题100:缺失的第一个正数(数组)
数据结构·算法·leetcode
oscar9996 小时前
软件测试面试全攻略之初级篇
软件测试·面试·职场和发展·初级篇
梨子串桃子_8 小时前
推荐系统学习笔记 | PyTorch学习笔记
pytorch·笔记·python·学习·算法
夏鹏今天学习了吗8 小时前
【LeetCode热题100(83/100)】最长递增子序列
算法·leetcode·职场和发展
情缘晓梦.8 小时前
C语言指针进阶
java·开发语言·算法
北邮刘老师9 小时前
智能体治理:人工智能时代信息化系统的全新挑战与课题
大数据·人工智能·算法·机器学习·智能体互联网
AlenTech10 小时前
155. 最小栈 - 力扣(LeetCode)
算法·leetcode·职场和发展
mit6.82410 小时前
正反两次扫描|单调性cut
算法
Yzzz-F10 小时前
牛客小白月赛127 E
算法
大锦终10 小时前
递归回溯综合练习
c++·算法·深度优先