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

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

文章目录

  • 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</

相关文章:

  • Spring 如何解决循环依赖问题?
  • 大模型时代的数据治理与数据资产管理研究方向
  • nginx之proxy_redirect应用
  • 数据结构之栈与队列
  • uniapp tabBar 中设置“custom“: true 在H5和app中无效解决办法
  • uniapp-商城-43-shop 后台管理 页面
  • idea连接mongodb配置schemas
  • yarn的概述
  • B站pwn教程笔记-7
  • RabbitMQ如何保证消息不丢失?
  • RabbitMQ中Exchange交换器的类型
  • 博图--硬件输入中断程序示例
  • 【CUDA C实战演练】CUDA介绍、安装、C代码示例
  • 从 “机器人 +“ 到 “+ 机器人“:算力政策撬动的产业生态革命
  • Android 蓝牙开发调试总结
  • 基于flask+pandas+csv的报表实现
  • 深入探讨 UDP 协议与多线程 HTTP 服务器
  • 8.12 GitHub Sentinel企业级进化:容器化优化×AI监控,效率提升300%实战
  • hadoop的序列化
  • LLaMA-Omni 2:基于 LLM 的自回归流语音合成实时口语聊天机器人
  • 经济日报整版聚焦“妈妈岗”:就业路越走越宽,有温度重实效
  • “80后”计算机专家唐金辉已任南京林业大学副校长
  • 司法部:民营经济促进法明确禁止违规异地执法、利用行政或者刑事手段违法干预经济纠纷
  • 41年轮回,从洛杉矶奔向洛杉矶,李宁故地重游再出发
  • Neuralink脑接设备获FDA突破性医疗设备认证
  • 有乘客被高铁车门夹住?铁路回应:系突感不适下车,未受伤,列车正点发车