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

不相同的二叉搜索树

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

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19
class Solution {
public:int numTrees(int n) {vector<int> dp(n + 1, 0); // 动态规划数组 dp,表示 i 个节点可以组成的二叉搜索树的数量dp[0] = 1; // 0 个节点时只有一种情况(空树)dp[1] = 1; // 1 个节点时也只有一种情况(只有根节点的树)for (int i = 2; i <= n; ++i) {  // 从 2 个节点开始逐步计算 dp[i]for (int j = 1; j <= i; ++j) {dp[i] += dp[j - 1] * dp[i - j]; // dp[j-1] 是左子树的可能数,dp[i-j] 是右子树的可能数}}return dp[n];}
};

二叉搜索树(BST)的性质

  • 每个节点的左子树的所有节点值都小于根节点。
  • 每个节点的右子树的所有节点值都大于根节点。

举例说明:

当 n=4时,所有可能的根节点分别是 1、2、3、4。

  • 选择 1 为根节点

    • 左子树有 0 个节点:dp[0] = 1
    • 右子树有 3 个节点:dp[3] = 5
    • 此时组合数为:1 * 5 = 5
  • 选择 2 为根节点

    • 左子树有 1 个节点:dp[1] = 1
    • 右子树有 2 个节点:dp[2] = 2
    • 此时组合数为:1 * 2 = 2
  • 选择 3 为根节点

    • 左子树有 2 个节点:dp[2] = 2
    • 右子树有 1 个节点:dp[1] = 1
    • 此时组合数为:2 * 1 = 2
  • 选择 4 为根节点

    • 左子树有 3 个节点:dp[3] = 5
    • 右子树有 0 个节点:dp[0] = 1
    • 此时组合数为:5 * 1 = 5

因此,dp[4] = 5 + 2 + 2 + 5 = 14

http://www.lryc.cn/news/451304.html

相关文章:

  • 毕业论文设计javaweb+VUE高校教师信息管理系统
  • L0-Python-关卡材料提交
  • 【unity进阶知识6】Resources的使用,如何封装一个Resources资源管理器
  • ThreadLocal内存泄漏分析
  • 第 30 章 XML
  • VMware下的ubuntu显示文字太小的自适应显示调整
  • 外贸网站怎么搭建对谷歌seo比较好?
  • 如何创建网络白名单
  • 前端动态创建svg不起效果?
  • 三、Drf request对象
  • CMIS5.2_光模块切应用(Application Selection and Instantiation)
  • 网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)
  • 828华为云征文|华为云 Flexus X 实例初体验
  • 欧科云链OKLink相约TOKEN2049:更全面、多元与安全
  • 遥感影像-语义分割数据集:云数据集详细介绍及训练样本处理流程
  • 【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解
  • 鸿蒙应用开发,如何保存登录信息
  • ★ C++进阶篇 ★ map和set
  • Python知识点:如何使用Nvidia Jetson与Python进行边缘计算
  • 动态分配内存
  • Unity Input System自动生成配置
  • 【Windows】在任务管理器中隐藏进程
  • 【TypeScript学习】TypeScript基础学习总结二
  • 中国电信解锁万亿参数大模型:TeleAI的创新与突破
  • 戴尔PowerEdge R840服务器亮黄灯 不开机
  • 【前端安全】js逆向之微信公众号登录密码
  • C# 泛型使用案例_C# 泛型使用整理
  • Docker 安装 Citus 单节点集群:全面指南与详细操作
  • Arthas redefine(加载外部的.class文件,redefine到JVM里 )
  • C++教程(三):c++常用的配置文件类型