当前位置:网站首页>Leetcode 96. 不同的二叉搜索树
Leetcode 96. 不同的二叉搜索树
2022-06-10 12:38:00 【Changersh】
96. 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1
提示:
1 <= n <= 19
思路
我们可以把n = 1 2 3 这三种情况都列出来,然后我们可以发现:
n = 1时,只有一个结点,值为1,也只能组成一种二叉搜索树。
n = 2时,1 2 可以1 为节点,也可以2为根节点,所以是两种情况。
n = 3时,也就是上图中的这一种情况,共五种情况,可以分成三大类:
- 1为根节点:剩下的都比1大,所以左子树有 1 - 1 = 0个结点,右子树有3 - 1 = 2个结点,那么情况又变成了右子树两个结点,左子树零个结点。所以此时次数 = 左子树0个结点的种类数 * 右子树2个结点的种类数
- 2为根节点:左子树 2 - 1 = 1个结点,右子树 3 - 2 = 1个结点,所以此时次数 = 左子树一个结点 * 右子树一个结点
- 3为根节点:左子树 3 - 1 = 2个结点,右子树 3 - 3 = 0个结点,所以此时次数 = 左子树两个结点 * 右子树一个结点
而我们也可以知道,无论左子树还是右子树对应结点数的种类数就等于dp[i]的值。
所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2];
对于第 i 个结点,要考虑从 1 到 i 作为根节点的情况,所以需要累加
一共是 i 个结点,对于根节点 j ,此时,左子树有 j - 1 个结点,右子树有 i - j 个结点
代码
class Solution {
public:
int numTrees(int n) {
int dp[n + 1];
for (int i = 0; i <= n; i++) dp[i] = 0;
dp[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[i - j] * dp[j - 1];
}
}
return dp[n];
}
};
/* //对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加 //一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-j */
/* 元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量 元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量 元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量 有2个元素的搜索树数量就是dp[2]。 有1个元素的搜索树数量就是dp[1]。 有0个元素的搜索树数量就是dp[0]。 所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2] */
边栏推荐
- 從解讀 BDC 自動生成的代碼談起,講解 SAPGUI 的程序組成部分
- STM32F407学习笔记(1)-EXTI中断事件与NVIC寄存器
- 蚂蚁金服杨军:蚂蚁数据分析平台的演进及数据分析方法的应用
- ASP.NET 利用ImageMap控件设计导航栏
- JS array to JSON, JSON to array. Array to comma separated string, string to array
- SparkStreaming实时数仓 问题&回答
- Tensorflow2.0进阶学习-图像 (十一)
- Shadergraph - 302 swimming Dragon
- JS converts timestamp to normal time format
- CMakeLists. Txt how to write
猜你喜欢

Software project management 6.10 Cost budget

Which EDA design software should Altium Allegro pads choose

Learning of cc2642r Bluetooth MCU chip

UML类图

Slm4054 independent linear lithium battery charger chip learning

日本版arXiv凉得一批:2个多月了,才收到37篇论文

统计100以内的各位数之和为7的自然数的个数及平均值

ASP. Net using imagemap control to design navigation bar

阿里云ECS服务器搭建Mysql数据库
![[mobile robot] principle of wheel odometer](/img/91/fbe7ad8e37a70384f043a785d34865.png)
[mobile robot] principle of wheel odometer
随机推荐
用GNN做CV三大任务的新骨干,同计算成本性能不输CNN、ViT与MLP|中科院&华为诺亚开源...
Altium Allegro PADS到底该选哪个EDA设计软件
Learning of fm4057s single lithium battery linear charging chip
Colmap source code reading notes [1] threading cc
SparkStreaming实时数仓 问题&回答
JS use the Icheck plug-in to listen and get the value of the checkbox
JTAG-to-AXI Master调试AXI BRAM Controller
CMakeLists.txt 如何编写
蚂蚁金服杨军:蚂蚁数据分析平台的演进及数据分析方法的应用
Tidb Primary course experience 8 (Management Maintenance of Clusters, add a tikv Node)
【抬杠C#】如何实现接口的base调用
Software project management 6.10 Cost budget
從解讀 BDC 自動生成的代碼談起,講解 SAPGUI 的程序組成部分
启牛能开户吗,在启牛开户安全么
VDO-SLAM: A Visual Dynamic Object-aware SLAM System 论文阅读
PCB learning notes (2) -3d packaging related
excel异步导出
今天,一对情侣拿下香港最大电商IPO
The Japanese version of arXiv is a cool batch: only 37 papers have been received after more than 2 months
The ability to register user names and passwords with the database