代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先、 701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点

news2024/10/7 6:45:33

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

在这里插入图片描述

题目链接:235. 二叉搜索树的最近公共祖先
文档讲解:代码随想录
状态:只会昨天的方法,没有想到利用二叉搜索树的性质。

思路:
如果当前节点的值同时小于 p 和 q 的值,说明 p 和 q 都在当前节点的右子树,因此继续在右子树中查找。
如果当前节点的值同时大于 p 和 q 的值,说明 p 和 q 都在当前节点的左子树,因此继续在左子树中查找。
如果当前节点的值在 p 和 q 之间(包括等于 p 或 q),那么当前节点就是 p 和 q 的最近公共祖先。

题解:

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    // 如果当前节点的值同时小于 p 和 q 的值,说明 p 和 q 都在右子树
    if (root.val < q.val && root.val < p.val) {
        return lowestCommonAncestor(root.right, p, q);
    }
    // 如果当前节点的值同时大于 p 和 q 的值,说明 p 和 q 都在左子树
    if (root.val > q.val && root.val > p.val) {
        return lowestCommonAncestor(root.left, p, q);
    }
    // 否则,当前节点就是 p 和 q 的最近公共祖先
    return root;
}

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

在这里插入图片描述

题目链接:701.二叉搜索树中的插入操作
文档讲解:代码随想录
状态:没做出来

思路:二叉树的插入,递归的返回值肯定是要给root的左右节点的,关键是构建节点的逻辑怎么写

  • 在二叉搜索树中,左子树的节点值小于根节点的值,右子树的节点值大于根节点的值。因此,当需要插入一个新节点时,我们从根节点开始比较:
  • 如果新节点的值小于当前节点的值,则应该往左子树方向插入;
  • 如果新节点的值大于当前节点的值,则应该往右子树方向插入。
  • 这样递归地比较,直到找到一个空节点(当前节点的子节点为 null)为止,那么这个空节点就是新节点的插入位置。

题解:

    public TreeNode insertIntoBST(TreeNode root, int val) {
        // 如果根节点为空,创建一个新节点并返回
        // 返回给谁呢?以左下结点x为例,处理后返回了一个新节点y.
        // 后面代码中,root.left = insertIntoBST(root.left, val);表明新节点y被x结点的父节点的left接住了
        // 当在递归过程中找到了正确的插入位置时,会创建一个新节点,并将其返回。在回溯的过程中,将这个新节点连接到其父节点的左子节点或右子节点,确保新节点被正确地接入到树中。
        if (root == null) {
            return new TreeNode(val);
        }

//        不需要去判断左右子树是否为空,因为root==null时会创建新结点
        // 如果要插入的值小于当前节点的值,插入到左子树
        if (val < root.val) {
            // 在左子树中递归插入
            root.left = insertIntoBST(root.left, val);
        }
        // 如果要插入的值大于当前节点的值,插入到右子树
        else if (val > root.val) {
            // 在右子树中递归插入
            root.right = insertIntoBST(root.right, val);
        }

        // 返回根节点,无论是否进行插入
        return root;
    }

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

在这里插入图片描述

题目链接:450.删除二叉搜索树中的节点
文档讲解:代码随想录
状态:要考虑的情况太多,没做出来。

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

题解:

    public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) {
            return null;
        }
        //如果找到了key
        if (root.val == key) {
            //当key为叶子节点时,返回null
            if (root.left == null && root.right == null) {
                return null;
            } else if (root.left != null && root.right == null) {
                //当右孩子为空
                return root.left;
            } else if (root.right != null && root.left == null) {
                //当左孩子为空
                return root.right;
            } else {
                //左右孩子都不为空时,可以把左孩子转接到右孩子的左叶子结点下
                TreeNode cur = root.right;//cur遍历右孩子
                while (cur.left != null) {
                    cur = cur.left;
                }
                cur.left = root.left;//左孩子转接到右孩子的左叶子结点下
                return root.right;
            }
        } else if (key < root.val) {
            root.left = deleteNode(root.left, key);
        } else {
            root.right = deleteNode(root.right, key);
        }
        return root;
    }

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

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

相关文章

从报名到领证:软考初级【信息系统运行管理员】报名考试全攻略

本文共计9991字&#xff0c;预计阅读33分钟。包括七个篇章&#xff1a;报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求&#xff1a; 1.凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术…

USB设备编程

文章目录 问题1、为什么一接入 USB 设备&#xff0c; PC 机就能发现它&#xff1f;image.pngUSB 设备刚接入 PC 时&#xff0c;还没有编号&#xff1b;那么 PC 怎么把"分配的编号"告诉它&#xff1f;硬件框架2、软件框架usb发信号usb信号位填充反向不归零编码 发送/接…

毕业年薪20w起!25届最近5年南京信息工程大学自动化考研院校分析

南京信息工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、…

设置systemctl start kibana重启kibana

1、编辑kibana.service vi /etc/systemd/system/kibana.service [Unit] DescriptionKibana Server Manager [Service] Typesimple Useres ExecStart/home/es/kibana-7.10.2-linux-x86_64/bin/kibana PrivateTmptrue [Install] WantedBymulti-user.target 2、启动kibana # 刷…

13大最佳工程项目管理系统软件盘点

国内外主流的13款工程项目管理系统软件&#xff1a;Worktile、中建软件、泛微建筑项目管理软件、LiquidPlanner、Wrike、建文软件、广联达、Microsoft Project、泛普软件、Procore、Buildertrend、Fieldwire、Autodesk Construction Cloud。 在快速变化的工程领域&#xff0c;有…

ssh实验室设备管理系统

ssh实验室设备管理系统 实验室设备管理系统 管理员&#xff1a;通知管理、预约 借用模块、设备信息 维修模块等 教师和学生&#xff1a;预约实验室模块 技术: java ssh spring mysql 环境&#xff1a;idea java1.8 mysql5.7 源码➕数据库文件➕文档

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式&#xff0c;具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生&#xff0c;由原来医院 (Hospital)到现在的医疗卫生 (Healthcare)&#xff0c;拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

表 达式树

》》》可以借助 LINQPad工具 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Transactions;namespace EFDemo {public cla…

直流遥控器DC10-100V 水泵电机远程遥控 SL3036降压恒压

水泵电机的远程遥控技术已经成为工业、农业以及民用领域不可或缺的重要一环。其中&#xff0c;直流遥控器DC10-100V以其出色的性能和广泛的应用领域&#xff0c;成为了市场上的一颗璀璨明星。而SL3036降压恒压技术的运用&#xff0c;更是为水泵电机的远程遥控提供了强有力的支持…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

Tita 360评估:有效 360度反馈流程的 10 大步骤

宣传过程 如果你的公司首次引入多方位反馈或 360 度反馈&#xff0c;那么向所有利益相关者描述这一流程至关重要。由于流程太新&#xff0c;很多人还不了解。确保参与该流程的每个人都了解其目的&#xff0c;以及将如何实施该流程和使用其结果。花时间在一对一会议、小组会议和…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,…

后仿真中《SDF反标必懂连载篇》之 <INTERCONNECT/IOPATH> 庐山面目

对于SDF INTERCONNECT ENTRY 描述&#xff0c;我们在之前的文章有详解。 读万卷书&#xff0c;行万里路。 实践很重要。 今天&#xff0c;搞一下SDF INTERCONNECT / IOPATH 延迟数据信息&#xff0c;究竟反标的是哪一路径延时&#xff1f; 一 IOPATH (CELL(CELLTYPE …

STM32F103C8T6 IAP升级

目录 0x00 前言0x01 flash分区0x02 Bootloader0x02 APP设置0x03 升级程序编写0x04 固件烧录 0x00 前言 STM32有三种烧录程序的方式&#xff1a;烧录器下载、拉高boot1进行串口下载(ISP)还有通过在 Bootloader中进行flash擦除和写入(IAP)。 在进行开发之前&#xff0c;你需要了…

上海晋名室外危废品暂存柜助力储能电站行业危废品安全储存

近日又有一台SAVEST室外危废暂存柜项目成功验收交付使用&#xff0c;此次项目主要用于储能电站行业废油、废锂电池等危废品的安全储存。 用户单位在日常工作运营中涉及到废油、废锂电池等危废品的室外安全储存问题。4月中旬用户技术总工在寻找解决方案的过程中搜索到上海晋名的…

蒂姆·库克解释Apple Intelligence和与ChatGPT合作的区别|TodayAI

在2024年全球开发者大会&#xff08;WWDC 2024&#xff09;上&#xff0c;苹果公司首席执行官蒂姆库克&#xff08;Tim Cook&#xff09;隆重介绍了公司的最新人工智能&#xff08;AI&#xff09;计划——Apple Intelligence&#xff0c;并宣布了与OpenAI的ChatGPT的合作。虽然…

突破管理瓶颈:基于前端技术的全面预算编制系统解析

前言 在现代商业环境中&#xff0c;预测销售数据和实际成本是每个公司CEO和领导都极为重视的关键指标。然而&#xff0c;由于市场的不断变化&#xff0c;准确地预测和管理这些数据变得愈发具有挑战性。为了应对这一挑战&#xff0c;建立一个高效的系统来管理和审查销售数据的重…

展位展台设计要注意的问题

1、选择专业的展台设计公司 特装比一般展位设计更要保证展台的独特性&#xff0c;更具可塑性。任何疑问和要求都能得到专业的解答。不论是展台的整体结构&#xff0c;还是展台搭建材料&#xff0c;都能实现良好的沟通&#xff0c;两方面都可以确保参加展会的双赢。 2、缜密的展…

智能家居建材,打造未来家居生活

智能家居建材&#xff0c;正引领着家居行业的新潮流。它融合了先进的科技与人性化的设计&#xff0c;为我们打造了一个充满未来感的家居新体验。 想象一下&#xff0c;当你走进家门&#xff0c;智能门锁自动识别你的身份&#xff0c;轻轻一推即可进入。室内环境自动调节到最舒适…