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

相关推荐
wuguan_3 分钟前
C#递推算法
算法·c#·递推算法
+VX:Fegn08957 分钟前
计算机毕业设计|基于springboot + vue英语学习系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
步步为营DotNet9 分钟前
深度剖析ASP.NET Core Middleware:构建高效请求处理管道的关键
后端·asp.net
_OP_CHEN9 分钟前
【C++数据结构进阶】从 Redis 底层到手写实现!跳表(Skiplist)全解析:手把手带你吃透 O (logN) 查找的神级结构!
数据结构·数据库·c++·redis·面试·力扣·跳表
多米Domi01111 分钟前
0x3f第14天 最长公共子序列
算法·深度优先
spssau15 分钟前
正交试验设计全解析:从正交表生成到极差与方差分析
数据库·算法·机器学习
minhuan27 分钟前
大模型应用:不减性能只减负担:大模型稀疏化技术全景与实践.36
大数据·人工智能·算法
唐叔在学习32 分钟前
Pyinstaller进阶之构建管理大杀器-SPEC文件
后端·python·程序员
伯明翰java35 分钟前
【无标题】springboot项目yml中使用中文注释报错的解决方法
java·spring boot·后端
ihgry36 分钟前
java并发编程(juc理论篇)
后端