96. 不同的二叉搜索树

news/2024/11/29 22:29:34/

目录

1、题目描述

2、思路:动态规划

2.2、确定递推公式

2.3、dp数组初始化

2.4、确定遍历顺序

3、C++实现如下


1、题目描述

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

示例 1:


输入:n = 3
输出:5
示例 2:

输入:n = 1
输出:1
 

提示:

1 <= n <= 19

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-binary-search-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、思路:动态规划

首先仔细都题目,寻找以下n与搜索树数量的关系。

n为1时,搜索树的数量为1;n为2时,搜说树的数量为2。

n为3时,可以有三种情况:

头节点为1时,左子树有0个节点,右子树有2个节点,2个节点的分布情况与n为2时的情况相同。

头节点为2时,左子树有1个节点,右子树有1个节点,1个节点的分布情况与n为1时的情况相同。

头节点为3时,左子树有2个节点,右子树有0个节点,2个节点的分布情况与n为2时的情况相同。

所以我们便可以找到递推公式之间的关系:dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]

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

dp[i]表示n=i时的最大搜索树的数量。

2.2、确定递推公式

dp[i] += 以j为头结点的搜索树数量 =  dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]

j相当于是头结点的元素,从1遍历到i为止。

2.3、dp数组初始化

dp[0]相当于没有子树的情况,自然是1种分布情况。

dp[1]则是以1为头节点,左子树数量为0,右子树数量为0,dp[0]*dp[0] = 1;

所以初始化为dp[0] = 1即可。

2.4、确定遍历顺序

从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。

3、C++实现如下

class Solution {
public:int numTrees(int n) {vector<int> dp(n+1);dp[0] = 1;for(int i = 1;i<=n;++i){for(int j = 1;j<=i;++j){dp[i] += dp[j-1]*dp[i-j];}}return dp[n];}
};


http://www.ppmy.cn/news/58434.html

相关文章

Mybatis读取和存储json类型的数据

目录 一、测试使用JSONObject来获取json二、设置TableName的autoResultMap为true&#xff0c;TableField的typeHandler为JacksonTypeHandler.class三、设置xml当中的resultMap四、JacksonTypeHandler讲解五、新增假如是JSONObject异常问题六、遇到转义的问题 不管数据库当中是以…

ospf扩展配置—认证、沉默接口、加快收敛、缺省路由

目录标题 认证接口认证区域认证虚链路认证 沉默接口加快收敛缺省路由3类缺省5类缺省7类缺省 总结 认证 在直连的邻居或邻接之间&#xff0c;配置身份核实秘钥来保障邻居、邻接间数据沟通的安全性 接口认证 在这连连接的接口上配置 [r6-GigabitEthernet0/0/1]ospf authentic…

生成C++工程的UML类图和类继承关系图

简介 在进行软件开发时&#xff0c;了解代码结构和关系、类之间的继承关系以及类内部的成员函数和变量定义是非常重要的。为此&#xff0c;我们可以使用Doxygen和Graphviz工具来生成UML类图和类集成关系图。 Doxygen是一个用于从注释的C源代码中生成文档的工具&#xff0c;支…

Ubuntu---mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法

查看mysql版本&#xff1a; 安装完成后&#xff0c;登录mysql的时候就出现了如下错误&#xff1a; 因为安装的过程中没让设置密码&#xff0c;可能密码为空&#xff0c;但无论如何都进不去mysql。 下面是处理过程&#xff1a; Step1&#xff1a;修改mysqld.cnf配置文件 在ubun…

(九)Geoprocessing地理处理框架——ArcToolbox内容简介

&#xff08;九&#xff09;Geoprocessing地理处理框架——ArcToolbox内容简介 目录 &#xff08;九&#xff09;Geoprocessing地理处理框架——ArcToolbox内容简介 1.工具集简介1.1 3D Analyst工具箱&#xff1a;1.2分析工具箱:1.3制图工具箱:1.4转换工具箱:1.5Data Interoper…

PACS系统源码,大型医院PACS源码集成三维重建

PACS系统为医院提供包括放射、超声、核医学、病理、内窥镜、心电图室在内的所有影像检查数字化的一体化解决方案。 它涵盖了传统PACS和RIS系统的所有功能&#xff0c;以构建全数字化影像科为目标&#xff0c;致力于实现对医院所有影像数据的统一管理、影像检查工作流的自动化&a…

项目连载方式

协议介绍 芯片介绍 读写操作 小熊派驱动系列连载正点原子的代码重新用Cubemx实现协议分析项目制作单片机上云的代码移植可以使用Arduino接管或者使用以太网、或者ESP8266移植开源项目复刻 在小熊派的板子上进行简单的步骤实现&#xff0c;函数分析&#xff0c;在正点原子的…

RUST 每日一省:trait种类

trait的基本形式&#xff0c;很简单&#xff0c;但这只是trait的冰山一角。当你开始接触大型代码库中的trait时&#xff0c;将会遇到它的多种形式。种类繁多有助于我们完成复杂问题的建模。下面我们一次介绍其他形式的trait&#xff0c;以便了解何时需要使用它们。 标准trait …