代码随想录刷题随记19-二叉树8

代码随想录刷题随记19-二叉树8

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

leetcode
因为是有序树,所以 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p
注意这里必须先访问根节点,后序遍历不行
解题代码

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode * cur;stack<TreeNode* >mystack;mystack.push(root);while(!mystack.empty()){cur=mystack.top();mystack.pop();if(cur==p||cur==q)return cur;if((cur->val>p->val&&cur->val<q->val)||(cur->val<p->val&&cur->val>q->val))return cur;if(cur->right!=nullptr)mystack.push(cur->right);if(cur->left!=nullptr)mystack.push(cur->left);            }   return nullptr;}
};

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

leetcode链接
只要遍历二叉搜索树,找到空节点 插入元素就可以了,并不需要调整树的结构

class Solution {
public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(root==nullptr)return new TreeNode(val);TreeNode * cur=root;TreeNode * pre=nullptr;while(cur!=nullptr){pre=cur;
…       pre->right=new TreeNode (val);return root;}
};

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

leetcode链接

与插入不同,删除节点涉及到修改树的结构
有点类似于两个搜索树要合并的意思
解题代码

在这里插入代码片

有以下五种情况:

第一种情况:没找到删除的节点,遍历到空节点直接返回了
找到删除的节点
第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。

class Solution {
public:TreeNode * subdel(TreeNode * cur){if(cur==nullptr)return nullptr;if(cur->left==nullptr&&cur->right==nullptr)return nullptr;if(cur->left==nullptr)return cur->right;if(cur->right==nullptr)return cur->left;TreeNode * tmp=cur->right;while(tmp->left){tmp=tmp->left;}tmp->left=cur->left;tmp=cur;cur=cur->right;tmp->right=nullptr;tmp->left=nullptr;delete tmp;return cur;}TreeNode* deleteNode(TreeNode* root, int key) {TreeNode * cur=root;TreeNode * pre=nullptr;if(root==nullptr)return nullptr;while(cur!=nullptr){      if(cur->val==key)break;pre=cur;if(cur->val<key)cur=cur->right;else cur=cur->left;}//没找到if(cur==nullptr){return root;}//要删除的是根节点if(pre==nullptr)return subdel(root);if(pre->left==cur){pre->left=subdel(cur);}else if(pre->right==cur){pre->right=subdel(cur);}return root;}};

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

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

相关文章

中科软面试题

1、用户注册登录这一块用了哪些技术&#xff1f;数据库主要涉及那些表&#xff1f; 用了BCrypt加密算法&#xff0c;jwt生成token&#xff0c;网关实现全局过滤器校验token&#xff0c;还用了拦截器&#xff0c;获取在网关是指到请求头的userid存到threadlocal里面&#xff0c…

模型训练-保存训练数据

1.目的 找到一个可运行的代码&#xff0c;可以每个epoch打印训练数据&#xff0c;但是不会保存。因为在改进模型需要这些训练数据进行对比&#xff0c;所以需要将每个epoch的训练数据保存下来&#xff0c;写到一个文件中。 2.解决方案 直接问ChatGPT&#xff0c;提示词如下&…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互&#xff0c;从而实现了Web请求的接收&#xff0c;处理和响应。 它的组件有如下几个&#xff1a; DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

0基础刷图论最短路 3(从ATcoder 0分到1800分)

AT最短路刷题3&#xff08;本文难度rated 1200~ 1400&#xff09; 题目来源&#xff1a;Atcoder 题目收集&#xff1a; https://atcoder-tags.herokuapp.com/tags/Graph/Shortest-Path &#xff08;里面按tag分类好了Atcoder的所有题目&#xff0c;类似cf&#xff09; &#x…

Ubuntu22.04安装ffmpeg(v7.0)

需下载文件&#xff1a;ffmpeg-7.0.tar.gz 安装步骤 1. 创建目录 mkdir -p /ffmpeg && cd ffmpeg2. 下载文件 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz3. 解压 tar -zxvf ffmpeg-7.0.tar.gz && cd ffmpeg-7.04. 安装环境依赖 官网说明&#…

练习题(2024/4/11)

1每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

Leetcode刷题之消失的数字(C语言版)

Leetcode刷题之消失的数字&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作…

STM32 文档整理

//***********************************************************************************************************// 英文缩写名称NVIC嵌套向量中断控制器SysTick系统滴答定时器RCC复位和时钟控制GPIO通用IO口AFIO复用IO口EXTI外部中断TIM定时器ADC模数转换器DMA直接内存访…

Java中实现监听UDP协议的指定端口并收到数据按照十六进制输出

场景 对接协议中需要监听UDP协议的指定端口并监听数据&#xff0c;且数据格式为十六进制。 如果是在linux服务上&#xff0c;可以快速通过C或者python脚本等方式实现。 这里使用Java代码实现&#xff0c;可便于后续做其他存储数据等的扩展&#xff0c;且只需要在服务器上安装…

华为OD七日集训第6期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 6 期五、精心挑选21道高频经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、双指针第3天、滑动窗口第4天、二叉树第5天、矩阵第6天、分治递归第7天、深度优先搜索 大家好&#xff0c;我是哪吒。 最近一直在…

《安静的力量》探寻自我的心灵之旅,找到内心的宁静和真正的幸福 - 三余书屋 3ysw.net

安静的力量&#xff1a;通往止境的冒险 大家好&#xff0c;今天我们要解读的书籍是《安静的力量》。让我们先设想一个画面&#xff1a;在纽约曼哈顿&#xff0c;紧邻繁华的时代广场&#xff0c;一位29岁的青年在他的公寓里工作。这里毗邻纽约最富有人群的聚居区&#xff0c;而…

Windows Edge 兼容性问题修复:提升用户体验的关键步骤

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

如何设置MySQL的IP白名单

当我们谈论设置MySQL数据库的IP白名单时&#xff0c;我们通常是在指定哪些IP地址被允许连接到数据库服务器。这是一种安全措施&#xff0c;可确保只有受信任的主机可以访问数据库。以下是一个分步指南&#xff0c;以及如何设置MySQL的IP白名单的说明。 步骤1: 登录到MySQL服务…

Django框架的基础知识

Django&#xff08;英文发音&#xff1a;dʒŋgəʊ&#xff09;是一个开放源代码的Web应用框架&#xff0c;使用高性能的Python语言编写而成。Django框架的诞生&#xff0c;最初是用来开发和管理Lawrence Publishing Group&#xff08;劳伦斯出版集团&#xff09;旗下的新闻网…

【vscode】在本地加载远端环境并开发

【vscode】在本地利用远程服务器显卡跑代码 写在最前面vscode&#xff1a;远程到本地1、安装ssh插件2、添加服务器连接配置3、连接服务器4. SSH配置5. 在ssh中安装python解释器 vscode基本操作 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光…

JS搜索关键字匹配变色

使用场景&#xff1a;用户通过搜索关健字&#xff08;keyword&#xff09;&#xff0c;对文本进行匹配&#xff0c;并对匹配到的文本进行一些高亮处理 解析&#xff1a;使用的是JavaScript中的 RegExp(正则表达式&#xff09;对象&#xff0c;var regExp new RegExp(keyword,…

银河麒麟操作系统修改dns(唯一一篇可以解决DNS生效问题)

背景: Kylin V10 SP1 系统修改dns 1.修改/etc/resolv.conf 临时生效,不满足生产要求 2.修改/etc/network/interface 不生效 3.修改/etc/systemd/resolved.conf,遇到问题,最终解决永久修改DNS 系统版本: root@node01:~# cat /etc/issue Kylin V10 SP1 \n \l 一、如何在…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址&#xff1a;&#x1f608; 目录 一、环境配置以及数据集准备 数据集准备 数据集格式展示 环境配置&#xff0c;按照官网所述即可 二、一些调整 vit_base的预训练模型 远程debug的设置 Tokenizer初始化失败 读入网络图片的调整 三、训练过程 Image Encoder …

FebHost:英国.UK域名注册使用中存在哪些侵权行为?

截至2023年6月&#xff0c;英国.uk域名作为全球第五大热门顶级域名&#xff0c;注册数量超过1100万&#xff0c;成为全球最知名和广泛使用的域名之一。英国域名家族包括四个独特的域名后缀——.uk、.co.uk、.org.uk 和 .me.uk——每个都有其独特的特点&#xff0c;并根据数字领…

Mac下用adb命令安装apk到android设备笔记

查询了些资料记录备用。以下是在Mac上使用命令行安装APK文件的步骤&#xff1a; 1. 下载并安装ADB&#xff1a; 如果您的Mac上没有安装ADB&#xff0c;请从官方的Android开发者网站下载Android SDK Platform Tools&#xff1a;Android SDK Platform Tools。将下载的ZIP文件解…