当前位置: 首页 > ai >正文

【卡特兰数】不同的二叉搜索树

文章目录

  • 96. 不同的二叉搜索树
    • 解法一:动态规划
      • 状态表示
      • 状态转移方程
      • 初始化
      • 遍历顺序
      • 返回值
    • 💥解法二:卡特兰数

在这里插入图片描述

96. 不同的二叉搜索树

96. 不同的二叉搜索树

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

示例 1:
在这里插入图片描述

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19

解法一:动态规划

状态表示

​ 一般这类动态规划,找状态表示比较难,都是通过 “举例 + 抽象出相同的子问题” 来表示状态!

​ 比如这里 n = 3 的情况:

在这里插入图片描述

​ 我们分别让 1~n 的每个数依次插入二叉树,可以推断当确定了一个根节点之后,左右字数的节点个数就确定了!此时左右子树又会变成相同的子问题,因此我们可以定义状态表示为:dp[i] 表示当节点数量为 i 时,一共有多少颗 BST

​ 此时其实就可以将上面的情况划分一下:

在这里插入图片描述

​ 难的是如何推导状态转移方程,因为它跟我们之前常见的状态转移方程不是很像。

状态转移方程

​ 对于 dp[i],表示此时有 i 个节点,那么此时对于所有不同的 BST 来说,我们可以按照以下规则来划分,分成不同的 i 类:

  • 1 元素为根节点的所有 BST
  • 2</
http://www.xdnf.cn/news/4474.html

相关文章:

  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.30)
  • (25.05)Ubuntu 20.04上安装和运行ORB-SLAM3(非ROS)
  • 操作指南*
  • 数通HCIE的通过率怎么样?
  • no main manifest attribute, in xxx.jar
  • 软件系统的可观测性 Observability
  • 【AI】模型与权重的基本概念
  • 《Python星球日记》 第45天:KNN 与 SVM 分类器
  • 从电话到V信语音:一款App实现全场景社交脱身
  • 28.成功解决i2c_transfer返回-6的问题并linux驱动mpu6050(适合一切linux学习者)
  • OpenCV 中用于背景分割(背景建模)的一个类cv::bgsegm::BackgroundSubtractorCNT
  • 【HarmonyOS 5】鸿蒙中常见的标题栏布局方案
  • Oracle 开窗函数
  • 高组装导轨的特点
  • Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
  • 《Python星球日记》 第43天:机器学习概述与Scikit-learn入门
  • 旧版谷歌浏览器Chrome v116.0.5845.141下载
  • 38.机壳间接缝的处理
  • 27、移除元素
  • 加速页面加载的全流程优化策略
  • 日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)
  • 【Linux 系统调试】Linux 调试工具strip使用方法
  • Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系
  • C 语言网络编程问题:E1696 无法打开 源 文件 “sys/socket.h“
  • ubuntu安装Go SDK
  • linux 怎么把trex-core-2.65用 crosstool-ng-1.27.0/编译
  • chili调试笔记13 工程图模块 mesh渲染 mesh共享边显示实现
  • FlyEnv:优雅直观的跨平台开发环境管理工具
  • VUE+ElementUI 使用el-input类型type=“number” 时,取消右边的上下箭头
  • Nginx 搭建支持多版本和前端路由的静态网站