LeetCode 第22天

235. 二叉搜索树的最近公共祖先
普通二叉树的最近公共祖先方法通用,但是涉及到二叉排序树的特性,就需要记得遍历得到的最近的一个值在p q值之间的结点,这个就是目标的公共祖先结点。这题算是写的比较透的了,用了三种方法。

class Solution {
public:TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q){// 1、以下是普通搜索树的方法// if (root == nullptr || root == p || root == q) return root;// TreeNode* left = traversal(root->left, p, q);// TreeNode* right = traversal(root->right, p, q);// if (left && right) return root;// else if (!left && right) return right;// else if (left && !right) return left;// else return nullptr;// 2、以下是用了二叉搜索树特性的方法if (root == nullptr) return root;// 并不是每次都遍历左右,而是视情况而定if (root->val > p->val && root->val > q->val){// 当前值大于两个目标值,则向左遍历TreeNode* left = traversal(root->left, p ,q);// 相当于把找到的值一直传上去if (left != nullptr){return left;}}if (root->val < p->val && root->val < q->val){// 当前值小于两个目标值,则向右遍历TreeNode* right = traversal(root->right, p ,q);if (right != nullptr){return right;}}// 两种情况都不符合,不递归了,直接返回当前节点,这个是最先找到的祖先节点return root;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {// return traversal(root, p, q);// 3、迭代写法TreeNode* cur = root;while (cur != nullptr){if (cur->val > p->val && cur->val > q->val){cur = cur->left;}else if (cur->val < p->val && cur->val < q->val){cur = cur->right;}else{return cur;}}return nullptr;}
};

701. 二叉搜索树中的插入操作

考研的时候我记得好像就背过如何建一棵排序二叉树,当时就觉得好简单,现在看也简单的,但是不容易写出来。递归写法最重要的就是利用回溯的特点,用上一层的结点接住下一层的返回值,二分查找得到的空节点就可以返回一个新建的结点。迭代写法需要用一个父节点记录找到的插入位置的父节点,从而用父节点接着新建结点。

class Solution {
public:TreeNode* traversal(TreeNode* root, int val){// 按照二叉搜索树的特性遍历二叉树,如果遇到空节点就是要插入的结点,返回新建的节点if (root == nullptr){TreeNode* node = new TreeNode(val);return node;}// 用root的孩子接住返回的结点if (root->val > val) root->left = traversal(root->left, val);if (root->val < val) root->right = traversal(root->right, val);return root;}TreeNode* insertIntoBST(TreeNode* root, int val) {// 1、迭代法// if (root == nullptr){//     TreeNode* node = new TreeNode(val);//     return node;// }// null不是特定节点,因此不可记录位置,需要用一个父节点记录要插入位置的前一个节点// TreeNode* pre = root;// TreeNode* cur = root;// while (cur != nullptr){//     pre = cur;//     if (val > cur->val){//         cur = cur->right;//     }//     else if (val < cur->val){//         cur = cur->left;//     }// }// TreeNode* node = new TreeNode(val);// if (val < pre->val){//     pre->left = node;// }// else if (val > pre->val){//     pre->right = node;// }// return root;//return traversal(root, val);}
};

450. 删除二叉搜索树中的节点
这题更是重量级,如果没写过真的很难写出来。包括现在我也云里雾里的,感觉可以算是hard题了。因为删除需要考虑的状况有点多,所以情况也复杂一些。当然我觉得用迭代会更简单点,但是现在不想深究它了。二刷再来掌握。

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {if (root == nullptr) return root;if (root->val == key){if (root->left == nullptr && root->right == nullptr){delete root;return nullptr;}else if (root->left == nullptr){auto retNode = root->right;delete root;return retNode;}else if (root->right == nullptr){auto retNode = root->left;delete root;return retNode;}else {TreeNode* cur = root->right;while (cur->left != nullptr){cur = cur->left;}cur->left = root->left;TreeNode* tmp = root;root = root->right;delete tmp;return root;}}if (root->val > key) root->left = deleteNode(root->left, key);if (root->val < key) root->right = deleteNode(root->right, key);return root;}
};

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

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

相关文章

Flink 集成和使用 Hive Metastore

1. AWS EMR 的 Flink 使用 Hive Metastore 想在 Flink 中使用 Hive Metastore 其实只需要将 Flink Hive Connector 以及 Hive Metastore 有关的 Jar 包部署到 ${FLINK_HOME}/lib 下即可&#xff0c;稍后我们会介绍一下具体做法。但是&#xff0c;如果是 AWS EMR&#xff0c;会有…

代码随想录算法训练营DAY8 | 字符串(1)

一、LeetCode 344 反转字符串 题目链接&#xff1a; 344.反转字符串https://leetcode.cn/problems/reverse-string/ 思路&#xff1a;双指针法交换。 class Solution {public void reverseString(char[] s) {int n s.length;int left 0, right n-1;while(left < right){c…

单元/集成测试服务

服务概述 单元/集成测试旨在证明被测软件实现其单元/架构设计规范、证明被测软件不包含非预期功能。经纬恒润测试团队拥有丰富的研发经验、严格的流程管控&#xff0c;依据ISO26262/ASPICE等开展符合要求的单元测试/集成测试工作。 在ISO 26262 - part6 部分产品开发&#xff…

2024 高级前端面试题之 Node 「精选篇」

该内容主要整理关于 Node 模块的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 Node模块精选篇 1. package.json版本号规则2. package.json 与 package-lock.json 的关3. npm 模块安装机制4. 模块化的差异 AMD CMD COMMONJS ESMODUL5. No…

vue3:中warch监听的几种写法

作用&#xff1a;监视数据的变化&#xff08;和vue2中的watch作用一致&#xff09; 特点&#xff1a;vue3中watch只能监视以下四种数据&#xff1a; 1、ref 定义的数据 2、reactive定义的数据 3、函数返回的值&#xff08;getter函数&#xff09; 4、前面3个内容的数组 写…

AD24-第三方网表导入PCB

1、文件路径需要纯英文路径 2、生成网表 3、将网表和PCB库放进工程里 4、进行网表添加 5、新建PCB 6、选择显示差异 7、对所有东西进行更新 8、创建工程变更列表 9、执行变更 总结&#xff1a; ①导出适合AD的网表 ②创建工程 &#xff08;包含网表PCB封装库PCB&#xff09; …

最近宣布的NIST后量子密码学标准的3个关键要点

当今世界依赖于许多保护措施&#xff0c;即使您没有注意到这一点。从手机和智能技术到网站&#xff0c;从支付交易到城市基础设施&#xff0c;人们经常与之互动的一切&#xff0c;都通过保护和检查技术来保护。量子计算机能够快速轻松地打破这些保护措施&#xff0c;这是政府和…

go语言-字符串处理常用函数

本文介绍go语言处理字符串类型的常见函数。 ## 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 () 。 str : This is a multiline string. ## 字符串的拼接 go // fmt.Sprintf方式拼接字符串 str1 : "abc" str2 : "def" …

【Qt学习笔记】(一)初识Qt

Qt学习笔记 1 使用Qt Creator 新建项目2 项目代码解释3 创建第一个 Hello World 程序4 关于内存泄漏问题5 Qt 中的对象树6 关于 qDebug&#xff08;&#xff09;的使用7 使用其他方式创建一个 Hello World 程序&#xff08;编辑框和按钮方式&#xff09;8 关于 Qt 中的命名规范…

【Python_PySide6学习笔记(三十二)】无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示

无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示前言一、无边框窗体设置二、点击任务栏图标显示和隐藏设置三、实现效果无边框窗体实现点击任务栏图标最小化,再次点击恢复窗体显示 前言 本文介绍基于 …

docker 无法执行systemctl

docker 无法执行systemctl:System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Host is down 背景 System has not been booted with systemd as init system (PID 1). Cant operate. Failed to connect to bus: Hos…

九、图表使用

一、QCharts概述 Qt图表提供了&#xff1a;折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构&#xff0c;其核心组件是QChartView和QChartQChartView是显示图标的视图&#xff0c;基类为…

【SpringBoot系列】自动装配的魅力:Spring Boot vs 传统Spring

IT行业有哪些证书含金量高? 文章目录 IT行业有哪些证书含金量高?强烈推荐前言区别项目配置&#xff1a;依赖管理&#xff1a;内嵌服务器&#xff1a;开发体验&#xff1a; 实例Spring项目示例&#xff1a;Spring Boot项目示例&#xff1a; 总结强烈推荐专栏集锦写在最后 强烈…

飞致云开源社区月度动态报告(2024年1月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中&#xff0c;界面通常都是动态的。下图所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

elk之基础概念

写在前面 本文一起看下es的基础概念&#xff0c;比较枯燥的内容说&#xff0c;但不看又不行。开始。 1&#xff1a;document 文档&#xff0c;是es搜索存储数据的最小单元&#xff0c;相当于是MySQL的一行记录&#xff0c;但es中是一个json&#xff0c;如下是一个通过logsta…

kuboard-spray 导入离线资源包

下载镜像 # 1. 在一台可以联网的机器上执行 docker pull registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v2.18.0a-8_k8s-v1.23.9_v1.16-amd64 docker save registry.cn-shanghai.aliyuncs.com/kuboard-spray/kuboard-spray-resource:spray-v…

websocket编写聊天室

【黑马程序员】WebSocket打造在线聊天室【配套资料源码】 总时长 02:45:00 共6P 此文章包含第1p-第p6的内容 简介 温馨提示&#xff1a;现在都是第三方支持聊天&#xff0c;如极光&#xff0c;学这个用于自己项目完全没问题&#xff0c;大项目不建议使用 需求分析 代码

8、应急响应-战前溯源反制主机蜜罐系统HFishHIDSElkeidWazuh

用途&#xff1a;个人学习笔记&#xff0c;欢迎指正 目录 背景&#xff1a; 一、潮源反制-平台部署-蜜罐-Hfish 二、溯源反制-平台部署-HIDS-Wazuh 三、溯源反制-平台部署-HlDS-Elkeid-hub 背景&#xff1a; 攻击者对服务器存在着各种威胁行为&#xff0c;作为安全人员&am…

WebAssembly核心编程[1]:wasm模块实例化的N种方式

当我们在一个Web应用中使用WebAssembly&#xff0c;最终的目的要么是执行wasm模块的入口程序&#xff08;通过start指令指定的函数&#xff09;&#xff0c;要么是调用其导出的函数&#xff0c;这一切的前提需要创建一个通过WebAssembly.Instance对象表示的wasm模块实例(源代码…