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、本题属于动态规划题目,需要理解递推公式推演的脉络。

相关推荐
爱代码的小黄人2 小时前
利用劳斯判据分析右半平面极点数量的方法研究
算法·机器学习·平面
崎岖Qiu2 小时前
【JVM篇11】:分代回收与GC回收范围的分类详解
java·jvm·后端·面试
许苑向上4 小时前
Spring Boot 自动装配底层源码实现详解
java·spring boot·后端
再学一点就睡4 小时前
手写 Promise 静态方法:从原理到实现
前端·javascript·面试
再学一点就睡5 小时前
前端必会:Promise 全解析,从原理到实战
前端·javascript·面试
今天也好累5 小时前
C 语言基础第16天:指针补充
java·c语言·数据结构·笔记·学习·算法
大千AI助手6 小时前
直接偏好优化(DPO):原理、演进与大模型对齐新范式
人工智能·神经网络·算法·机器学习·dpo·大模型对齐·直接偏好优化
超级小忍6 小时前
深入浅出:在 Spring Boot 中构建实时应用 - 全面掌握 WebSocket
spring boot·后端·websocket
没有bug.的程序员7 小时前
《Spring Security源码深度剖析:Filter链与权限控制模型》
java·后端·spring·security·filter·权限控制
无责任此方_修行中7 小时前
不止是 AI 热潮:AWS 2025 技术峰会带给我的思考
后端·架构·aws