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

相关推荐
dreams_dream7 分钟前
Django序列化器
后端·python·django
懷淰メ9 分钟前
python3GUI--短视频社交软件 By:Django+PyQt5(前后端分离项目)
后端·python·django·音视频·pyqt·抖音·前后端
有意义38 分钟前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
mm-q29152227291 小时前
【天野学院5期】 第5期易语言半内存辅助培训班,主讲游戏——手游:仙剑奇侠传4,端游:神魔大陆2
人工智能·算法·游戏
MoRanzhi12031 小时前
Python 实现:从数学模型到完整控制台版《2048》游戏
数据结构·python·算法·游戏·数学建模·矩阵·2048
2401_841495641 小时前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
汤姆yu2 小时前
基于springboot的民间救援队救助系统
java·spring boot·后端·救援队
嵌入式学习之旅2 小时前
嵌入式面试1103
面试·职场和发展
蒙奇D索大2 小时前
【算法】递归算法实战:汉诺塔问题详解与代码实现
c语言·考研·算法·面试·改行学it
IT_陈寒2 小时前
React性能优化实战:这5个Hooks技巧让我的应用快了40%
前端·人工智能·后端