leetcode 95.不同的二叉搜索树 Ⅱ

首先分析一下什么是二叉搜索树。因为我本科学习数据结构的时候就是单纯背了一下题库,考试非常简单。现在额外补充学一些之前自己没有学过的内容。有序向量可以二分查找,列表可以快速插入和删除。二叉搜索树可以实现按照关键码访问。call by key .数据表现为词条,这可能和现实联系更加紧密。比如说,我们在 csdn 里面搜索信息,一般都是搜索关键字。然后我们学习,很可能也是第一反应是一些关键字。之前写的堆排序,感觉有点像二叉搜索树,但是好像是优先队列。我这压根就不是复习,是学习。呜呜呜。我太喜欢和别人交流具体知识点了,尤其是我擅长的东西。那些不擅长的东西,希望自己能尽快擅长起来。因为这真的比较重要。中序遍历可以把标准的二叉树垂直映射到 x 轴,所以二叉树的查找类似于向量的二分查找。中序遍历的顺序是左子树,根,右子树。这个就是,输入一个需要查找的元素 e ,然后 e 比当前遍历到的元素小,就遍历到左子树。假设 e 比当前的遍历到的元素大,就遍历到右子树。这里有一个前提,就是认为,左子树是更小的元素,右子树是更大的元素。太难了。不研究了。

直接在算法题里面体会得了。二叉搜索树要求左子树小于等于根节点,右子树大于等于右子树。能不能取到等号,问一下 deepseek 。标准的 bst 是不能取到等号的。

对于 n 个节点生成的二叉搜索树的数量是 catalan(n) ,感觉时间复杂度分析考试应该不会考,算了。不学了。算了,感觉可以记一下,深入研究比较有意思。生成一棵二叉搜索树需要线性的时间,总共有 catalan(n) 棵二叉搜索树,所以时间复杂度是 O(n*catalan(n)) , c a t a l a n ( n ) = ( 2 n ) ! n ! ( n + 1 ) ! catalan(n)=\frac{(2n)!}{n!(n+1)!} catalan(n)=n!(n+1)!(2n)! ,查了一下,是做了一个近似处理,然后得到的卡特兰数的增长速度,其实就是第 n 个卡特兰数的近似表示, 4 n n 3 2 ⋅ π \frac {4^n}{n^{\frac32} \cdot \sqrt{\pi}} n23π 4n

数学公式这么写出来真帅啊!时间复杂度和空间复杂度均是 O ( 4 n n 1 2 ) O(\frac{4^n}{n^{\frac12}}) O(n214n)

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<TreeNode*> generateTrees(int start,int end){if(start>end){return {nullptr};}vector<TreeNode*> allTrees;for(int i=start;i<=end;i++){vector<TreeNode*> leftTrees=generateTrees(start,i-1);vector<TreeNode*> rightTrees=generateTrees(i+1,end);for(auto& left:leftTrees){for(auto& right:rightTrees){TreeNode* currTree=new TreeNode(i);currTree->left=left;currTree->right=right;allTrees.emplace_back(currTree);}}}return allTrees;}vector<TreeNode*> generateTrees(int n) {if(!n){return {};}return generateTrees(1,n);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据安全防线:备份文件的重要性与自动化实践

在数字化时代&#xff0c;信息已成为企业运营和个人生活的核心资源。无论是企业的核心数据、客户的敏感信息&#xff0c;还是个人的珍贵照片、重要文档&#xff0c;这些数据一旦丢失或受损&#xff0c;都可能带来不可估量的损失。因此&#xff0c;备份文件的重要性不言而喻&…

碰一碰发视频系统之写卡功能开发了,支持OEM

一、引言 在碰一碰发视频系统中&#xff0c;NFC&#xff08;Near Field Communication&#xff0c;近场通信&#xff09;技术扮演着关键角色。其中&#xff0c;写卡功能是实现用户与系统便捷交互的重要环节&#xff0c;通过将特定的视频相关信息写入 NFC 标签&#xff0c;用户…

【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解+代码解析]

看似不起眼的日复一日&#xff0c;总会在某一天让你看到坚持的意义。​​​​​​云边有个稻草人-CSDN博客 hello&#xff0c;好久不见&#xff01; 目录 一. 排序的概念及运用 1. 概念 2. 运用 3. 常见排序算法 二. 实现常见排序算法 1. 插入排序 &#xff08;1&…

python爬虫系列课程8:js浏览器window对象属性

python爬虫系列课程8:js浏览器window对象属性 一、JavaScript的组成二、document常见属性对象三、navigator对象一、JavaScript的组成 JavaScript可以分为三个部分:ECMAScript标准、DOM、BOM。 ECMAScript标准:即JS的基本语法,JavaScript的核心,描述了语言的基本语法和数…

快速使用PPASR V3版不能语音识别框架

前言 本文章主要介绍如何快速使用PPASR语音识别框架训练和推理&#xff0c;本文将致力于最简单的方式去介绍使用&#xff0c;如果使用更进阶功能&#xff0c;还需要从源码去看文档。仅需三行代码即可实现训练和推理。 源码地址&#xff1a;https://github.com/yeyupiaoling/P…

cannon g3810打印机设置

现在AI这么厉害&#xff0c;是不是很少人来这里搜索资料了。 不过我还是写一下。 买了一台cannon g3810打印机。一直都用USB打印&#xff0c;今天突然想用手机打印。于是又折腾了两个小时&#xff0c;终于折腾完了。 步骤如下&#xff1a; [1]打开官网&#xff0c;下载佳能…

使用 Arduino 和 ThingSpeak 通过 Internet 进行心跳监测

使用 Arduino 和 ThingSpeak 通过 Internet 进行心跳监测 在这个项目中,我们将使用 Arduino 制作一个心跳检测和监测系统,该系统将使用脉搏传感器检测心跳,并在与其连接的 LCD 上显示 BPM(每分钟心跳次数)读数。它还将使用 Wi-Fi 模块ESP8266将读数发送到 ThingSpeak 服务…

vulnhub靶场之【digitalworld.local系列】的snakeoil靶机

前言 靶机&#xff1a;digitalworld.local-snakeoil&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&#xff0…

自行车的主要品牌

一、国际知名品牌&#xff08;专注运动与高端市场&#xff09; 捷安特&#xff08;GIANT&#xff09; 台湾品牌&#xff0c;全球最大自行车制造商之一&#xff0c;覆盖山地车、公路车、通勤车等多品类。 美利达&#xff08;MERIDA&#xff09; 台湾品牌&#xff0c;以山地车…

C语言(队列)

1、队列的原理和作用 1、1 队列的原理 队列的原理其实就像一个管道&#xff0c;如果我们不断的往管道里塞乒乓球&#xff0c;每个乒乓球在管道里就会排列一条队列&#xff0c;先进去的乒乓球会先出来&#xff0c;这个就是队列先进先出的规则 球从左边进去的动作叫入列&#xf…

【C++算法】AVL树的平衡之美:从理论到C++高效实现

AVL树是一种自平衡二叉搜索树,解决了普通二叉搜索树在数据倾斜时的性能退化问题。本文深入探讨了AVL树的理论基础,包括平衡因子的定义、旋转操作的数学推导,并通过LaTeX公式分析其时间复杂度。接着,我们用C++实现了一个完整的AVL树,包括插入、删除和平衡调整的详细代码,附…

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片&#xff0c;运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具&#xff0c;如基本参数调整、HSL&#xff08;色相、饱和度、明亮度&#xff09;调整、曲线工具等改变照片原本的色彩、明度、对比度等属性&#xff0c;将…

ESP8266 NodeMCU 与 Atmega16 微控制器连接以发送电子邮件

NodeMCU ESP8266 AVR 微控制器 ATmega16 的接口 Atmega16 是一款低成本的 8 位微控制器,比以前版本的微控制器具有更多的 GPIO。它具有所有常用的通信协议,如 UART、USART、SPI 和 I2C。由于其广泛的社区支持和简单性,它在机器人、汽车和自动化行业有广泛的应用。 Atmega1…

【Hadoop】详解HDFS

Hadoop 分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统&#xff0c;它是一个高度容错性的系统&#xff0c;适合部署在廉价的机器上&#xff0c;能够提供高吞吐量的数据访问&#xff0c;非常适合大规模数据集上的应用。为了做到可靠性&#xff0c;HDFS创建了…

2025 批量下载市场高标解读/配置喵/wangdizhe 雪球帖子/文章导出excel和pdf

之前分享过文章2025 批量下载雪球和东方财富文章导出excel和pdf &#xff0c;今天整理分享下我下载过的一些雪球文章。 第1个号市场高标解读 抓取下载的所有帖子excel数据包含文章日期&#xff0c;文章标题&#xff0c;文章链接&#xff0c;文章简介&#xff0c;点赞数&#…

2022年《申论》第二题(河北A卷)

材料&#xff1a; “社区很大&#xff0c;共有安置房148栋&#xff0c;安置人口2.9万人。人员众多&#xff0c;而且原来都来自农村&#xff0c;群众生活环境变化大&#xff0c;不适应。”春林易地搬迁安置点建成使用后&#xff0c;老单便来这里担任春林街道办主任。如何有效治…

Qt中实现多个QMainWindow同时显示

在Qt中实现多个QMainWindow同时显示&#xff0c;可通过以下方法实现&#xff1a; 一、直接显示多个实例 必须使用new创建堆对象&#xff0c;避免栈对象因作用域结束被销毁‌。 int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建两个独立的主窗口QMainW…

从运动手环到医疗贴片,精密校平机正在重塑柔性电子器件的工业化生产标准

在柔性电子器件的制造领域&#xff0c;从运动手环到医疗贴片&#xff0c;精密校平机的应用正引领一场生产标准的变革。传统的柔性电子器件生产过程中&#xff0c;材料的平整度控制往往不够精确&#xff0c;导致产品质量参差不齐。然而&#xff0c;随着精密校平机的引入&#xf…

AIP-161 域掩码

编号161原文链接AIP-161: Field masks状态批准创建日期2021-03-01更新日期2021-03-01 在&#xff08;使用AIP-134的Update或类似方法&#xff09;更新资源时&#xff0c;通常需要明确指定哪些域需要更新。服务可以忽略另外的域&#xff0c;即使用户发送了值。 定义一种掩码格…

掌握Kubernetes Network Policy,构建安全的容器网络

在 Kubernetes 集群中&#xff0c;默认情况下&#xff0c;所有 Pod 之间都是可以相互通信的&#xff0c;这在某些场景下可能会带来安全隐患。为了实现更精细的网络访问控制&#xff0c;Kubernetes 提供了 Network Policy 机制。Network Policy 允许我们定义一组规则&#xff0c…