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

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

分析一波题目

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

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

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

根为1可以组成的二叉树

根为2可以组成的二叉树

根为3可以组成的二叉树

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

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

相关推荐
民乐团扒谱机13 分钟前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
码匠许师傅21 分钟前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试
kyriewen23 分钟前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
Nil2081 小时前
leetcode 160相交链表
算法·leetcode·链表
IT_陈寒1 小时前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端
迷途之人不知返2 小时前
算法系列2:滑动窗口
算法
Herbert_hwt2 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
31535669133 小时前
DeepSeek Harness 发布后,我没急着跑 Demo,先把 `.agents/` 翻了一遍
前端·后端·github
Nturmoils3 小时前
不在公司,也能连回办公电脑:用 Natapp 打通 Windows 远程桌面
后端
LEE3 小时前
AI Agent 都在疯狂加功能,它说:我全砍了
前端·后端