news 2026/7/5 3:06:17

【动态规划:96. 不同的二叉搜索树】刷题记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【动态规划:96. 不同的二叉搜索树】刷题记录

leetcode题目链接

题目:

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树有多少种?
返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5

示例 2:
输入:n = 1
输出:1
提示:1 <= n <= 19

1、确定dp数组以及下标的含义

dp[i] 表示 1 到 i 可以组成的互不相同二叉搜索树的种类。

2、确定递推公式

这个题目有些抽象,可以举例推导来找出递推关系。

n = 1 时,只有 1 种,dp[1] = 1。

n = 2 时,1、2 能组成的不同的二叉搜索数有下列 2 种 dp[2] = 2。

n = 3 时,1、2、3 能组成的不同的二叉搜索数有下列 5 种。

让每个数都做一次根节点,当 1 做根节点时,左子树只有为空这 1 种情况,右子树有 2 种情况;当 2 做根节点时,左子树只有 1 种情况,右子树也只有 1 种情况;当 3 做根节点时,左子树有 2 种情况,右子树只有 1 种情况。

在二叉搜索树中,一个节点的左右孩子还是一个二叉搜索树。

不难发现,1 做根节点时,右子树的那 2 种情况其实就是求 2 和 3 能组成的二叉搜索树有多少种,也就是 dp[2] 的值,左子树为空,空也可以看成是 1 种情况,也就是说 dp[0] = 1,那么 1 做根节点时一共有 dp[0] × dp[2] = 2 种情况;2 做根节点时,左右子树各有 1 个节点,那么就是 dp[1] × dp[1] = 1 种情况;3 做根节点时有 dp[2] × dp[0] = 2 种情况;所以当 n = 3 时,一共有 dp[0] × dp[2] + dp[0] × dp[2] + dp[0] × dp[2] = 5 种。

归纳一下,可以得出:

dp[i] += dp[j] * dp[(i - 1) - j];

3、dp数组如何初始化

dp[0] = 1,dp[0] 不在题目要求范围内,为了方便计算,我们定义 0 个节点时为 1 种情况。

4、确定遍历顺序

外层循环从左向右遍历 dp 数组,内层循环是求 dp[i] 的计算过程,j 表示左子树节点个数,(i - 1) - j 表示右子树节点个数。

for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { dp[i] += dp[j] * dp[(i - 1) - j]; } }

5、举例推导dp数组

可以尝试计算 dp[4] ,就不在此赘述了。

class Solution { public int numTrees(int n) { int[] dp = new int[n + 1]; dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { dp[i] += dp[j] * dp[(i - 1) - j]; } } return dp[n]; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 3:45:39

B站Hi-Res高清音频下载新玩法:解锁高品质音轨的创意方案

B站Hi-Res高清音频下载新玩法&#xff1a;解锁高品质音轨的创意方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/7/5 4:13:32

网易云音乐插件管理神器:零基础也能轻松掌控个性化体验

网易云音乐插件管理神器&#xff1a;零基础也能轻松掌控个性化体验 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼&#xff1f;想安装插件却被复杂的操…

作者头像 李华
网站建设 2026/7/5 3:53:55

企业审批流程自动化终极指南:基于Vue.js的智能解决方案

还在为传统审批流程的效率低下而苦恼吗&#xff1f;纸质表单流转、邮件来回确认、微信群消息频繁通知&#xff0c;这些传统方式不仅耗时耗力&#xff0c;还容易导致流程中断和错误。现代企业迫切需要一套智能化的审批流程管理系统来提升工作效率。 【免费下载链接】Workflow 仿…

作者头像 李华
网站建设 2026/7/5 4:14:47

GitHub访问速度终极优化:Fast-GitHub插件完整指南

还在为GitHub的龟速下载而烦恼吗&#xff1f;当你满怀期待地想clone一个开源项目&#xff0c;却发现下载进度像蜗牛一样缓慢时&#xff0c;那种心情真是让人崩溃。今天我要为你介绍一款能够彻底改变GitHub访问体验的神器——Fast-GitHub插件&#xff0c;让你的开发效率实现质的…

作者头像 李华
网站建设 2026/7/5 4:09:38

Vue3大屏可视化终极方案:从零搭建专业级数据展示平台

在当今数据驱动的时代&#xff0c;如何将海量数据以直观、美观的方式呈现给用户&#xff0c;成为前端开发者面临的重要挑战。vue-big-screen-plugin项目应运而生&#xff0c;为开发者提供了一套完整的Vue3大屏可视化解决方案。 【免费下载链接】vue-big-screen-plugin &#x1…

作者头像 李华
网站建设 2026/7/5 6:34:02

v-code-diff代码对比插件终极配置指南:从零到精通

v-code-diff代码对比插件终极配置指南&#xff1a;从零到精通 【免费下载链接】v-code-diff A vue code diff display plugin, support Vue2 / Vue3 项目地址: https://gitcode.com/gh_mirrors/vc/v-code-diff 还在为代码版本对比发愁吗&#xff1f;想象一下这样的场景&…

作者头像 李华