Follow Carl To Grow|【LeetCode】235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

【LeetCode】235. 二叉搜索树的最近公共祖先

题意:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

思路:相比于普通二叉树,二叉搜索树要思考利用有序性。判断二叉搜索树上两个结点的最近公共祖先,实际上就是自上而下遍历时满足结点值在这两个结点区间之内的第一个点。

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (!root || root == p || root == q){return root;}if ((root->val < p->val && root->val > q->val)|| (root->val > p->val && root->val < q->val)){return root;}else if (root->val < p->val && root->val < q->val){return lowestCommonAncestor(root->right, p, q);}else{return lowestCommonAncestor(root->left, p, q);}}
};

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

题意:给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

思路:递归判断需要插入的值,小就往左子树,大就往右子树,遇到叶子节点时赋值。

代码:

/*** 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:TreeNode* insertIntoBST(TreeNode* root, int val) {if (!root){return new TreeNode(val);}if (val > root->val){root->right = insertIntoBST(root->right, val);}else{root->left = insertIntoBST(root->left, val);}return root;}
};

【LeetCode】450.删除二叉搜索树中的节点

题意:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。

思路:递归二叉搜索树,分情况讨论,如果当前结点值比key小则往右子树找,比key大则往左子树找。找到key相同时,判断如果是叶子结点就直接删除返回,如果左子树为空则返回右子树,如果右子树为空则返回左子树,如果左右子树都不为空则将左子树作为右子树最左边结点的左子树(比它大的最小值位置)。

代码:

/*** 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:TreeNode* deleteNode(TreeNode* root, int key) {if (!root){return NULL;}if (key == root->val){// 左右子树都为空if (!root->left && !root->right){delete root;return NULL;}// 左子树为空else if (!root->left){return root->right;}// 右子树为空else if (!root->right){return root->left;}// 左右子树都不为空else{TreeNode* right = root->right;while (right->left){right = right->left;}right->left = root->left;TreeNode* node = root;root = root->right;delete node;node = NULL;return root;}}else if (key > root->val){root->right = deleteNode(root->right, key);}else{root->left = deleteNode(root->left, key);}return root;}
};

心态:“第六章 二叉树 part08” 拿下!
参考资料

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

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

相关文章

翻译《The Old New Thing》- Why do messages posted by PostThreadMessage disappear?

Why do messages posted by PostThreadMessage disappear? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20090930-00/?p16553 Raymond Chen 2008年09月30日 为什么 PostThreadMessage 发布的信息会消失&#xff1f; 在显示用户界面的线…

mybatis-plus 多租户方案1使用和坑注意事项,方案是需要实现租户功能的表都增加租户id字段

1 前提springboot整合好 mybatis-plus (版本3.5.4) 需要实现多租户的表&#xff0c;添加修改对应字段和 pojo类 (表添加tenant_id字段&#xff0c;pojo添加tenantId属性) 2 配置文件更改&#xff0c;方便扩展 #多租户配置 tenant:enable: truecolumn: tenant_idignoreTable…

【Java】网制焦,实也难,0基础,学反射

【Java】网制焦&#xff0c;实也难&#xff0c;0基础&#xff0c;学反射 文章目录 【Java】网制焦&#xff0c;实也难&#xff0c;0基础&#xff0c;学反射反射的概述 获取Class对象的三种方式通过对象的getClass()方法通过类的静态属性class通过Class.forName()方法 通过反射获…

代码随想录算法训练营第三十三天|LeetCode1005 k次取反后最大化的数组和、LeetCode134 加油站

题1&#xff1a; 指路&#xff1a;1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 题意清晰&#xff0c;需要注意的是需要把k次机会用完。数组中的数分为三种情况&#xff1a;正数&#xff0c;负数&#xff0c;0。要求数组…

《平凡的世界》读后感:走进平凡的世界

《平凡的世界》是一部充满人性光辉的小说&#xff0c;通过描写普通人的生活&#xff0c;展现了人生的苦乐交织。这篇读后感旨在通过秀、少平、金秀、兰香、秀莲、少安、孙玉厚、孙玉亭、顾养民、润生、润叶、向前、登云、晓霞、田福堂、田福军、张有智、苗凯、王满银、兰花等人…

算法 | 子集数排列树满m叉树二分搜索归并排序快速排序

子集树&#xff1a;O(2^n) 一个序列的所有子集为2^n&#xff0c;即可看成具有2^n个叶节点的满二叉树 int backtrack(int k) //k表示扩展结点在解空间树中所处的层次 {if(k>n) //n标识问题的规模output(x); //x是存放当前解的一维数组if(constraint(k)…

01—Linux网络设置

1.1查看及测试网络 1.1.1 查看网络配置 1.查看网络接口地址 主机的网络接口卡通常称为网络接口。在LInux操作系统中&#xff0c;使用ifconfig命令可以查看网络接口的地址配置信息。 &#xff08;1&#xff09;查看活动的网络接口设备 若采用mini版CenOS7安装的系统&#x…

新技术前沿-2023-大模型学习根据个人数据集微调一个Transformer模型

参考如何根据自己的数据集微调一个 Transformer 模型 我们将通过NLP中最常见的文本分类任务来学习如何在自己的数据集上利用迁移学习(transfer learning)微调一个预训练的Transformer模型——DistilBERT。DistilBERT是BERT的一个衍生版本&#xff0c;它的优点在它的性能与BERT相…

Vue14-监视属性

一、天气案例 1-1、方式一&#xff1a;{{三目运算符}} 1-2、方式二&#xff1a;计算属性 1-3、方式三&#xff1a;click中写简单逻辑 click里面可以写简单的逻辑语句。不用this 解决方式&#xff1a; 小结&#xff1a; 绑定事件的时候&#xff0c;xxx"yyy" xxx&…

C语言学习系列:GCC编译器Windows版本MinGW-w64的安装教程

本文图文分享如何安装C语言编译器——MinGW-w64。 只要看到这篇文章&#xff0c;就可以按照文中步骤正确安装MinGW-w64并使用。 一、什么是 MinGW-w64 &#xff1f; 我们知道C语言是高级语言&#xff0c;必须编译为二进制文件&#xff0c;才能为计算机运行&#xff0c;MinGW…

Web前端Canvas教程:绘制图形、动画与交互的奇妙世界

Web前端Canvas教程&#xff1a;绘制图形、动画与交互的奇妙世界 在Web前端技术中&#xff0c;Canvas无疑是一个强大的工具&#xff0c;它允许开发者在网页上绘制复杂的图形、创建生动的动画&#xff0c;并实现丰富的交互效果。本文将带领你走进Canvas的奇妙世界&#xff0c;从…

理解我的积木编程思想

1 学习教程&#xff0c;至少7139手册2 编程实践&#xff0c;遇到实际问题后&#xff0c;在技术资料中查找关键词3 选择适合的条目找到代 码。修正&#xff0c;组合。

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 STM32如何传输浮点数4.3 简单移植&…

shell编程(三)—— 控制语句

程序的运行除了顺序运行外&#xff0c;还可以通过控制语句来改变执行顺序。本文介绍bash的控制语句用法。 一、条件语句 Bash 中的条件语句让我们可以决定一个操作是否被执行。结果取决于一个包在[[ ]]里的表达式。 bash中的检测命令由[[]]包起来&#xff0c;用于检测一个条…

第一次视频学习

1、了解AI答题应用 1.1 业务流程架构图 1.2 自定义上传题目流程 1.3 时序图 这个比较困难&#xff0c;第一次了解到流式&#xff0c;便于前端与用户交互

千益畅行,引领旅游新潮流,共享经济下的创新旅游模式

在当前旅游行业中&#xff0c;千益畅行作为一种新型的旅游模式&#xff0c;正逐渐受到市场的关注和认可。它不仅为旅行社带来了新的客流&#xff0c;还巧妙地规避了高额的广告费用&#xff0c;实现了资源配置的优化和营销成本的大幅节约。 面对旅游经济的下滑&#xff0c;许多…

【微服务】springcloud-alibaba 配置多环境管理使用详解

目录 一、前言 二、配置多环境问题概述 2.1 什么是微服务多环境配置管理 2.1.1 微服务多环境配置管理问题起源 2.2 为什么要做多环境配置管理 2.3 微服务多环境配置管理解决方案 三、springboot 配置多环境管理解决方案 3.1 前置准备 3.1.1 搭建一个springboot工程 3.…

【PowerDesigner】创建和管理CDM之使用实体间关系

目录 &#x1f30a;1. PowerDesigner简介 &#x1f30d;1.1 常用模型文件 &#x1f30d;1.2 PowerDesigner使用环境 &#x1f30a;2. 创建和管理CDM &#x1f30d;​​​​​​2.1 新建CDM &#x1f30d;2.2 使用实体间关系 &#x1f30c;a. 使用联系 &#x1f30c;b. …

C#面:PDB是什么东西? 在调试中它应该放在哪里

C# PDB&#xff08;Program Database&#xff09;是一种用于存储调试信息的文件格式。它包含了源代码文件、符号表和其他调试相关的信息&#xff0c;可以帮助开发人员在调试过程中定位和解决问题 在调试中&#xff0c;PDB文件应该与编译生成的可执行文件&#xff08;如DLL或EX…

嵌入式仪器模块:DMM LCR SMU 及自动化测试软件

• 6 位数字表显示 • 24 位分辨率 • 250 KSPS 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 应用场景 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 通道1222输入阻抗电压10 MΩHigh-Z, 10 MΩHigh-Z电流10 Ω50 mΩ / 2 Ω / 2 KΩ2 KΩ / 2 M…