Leetcode 算法刷题Day22-----------------------二叉树

news2024/11/18 8:42:57

Leetcode 算法刷题Day22-----------------------二叉树

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

  • 题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/
  • 文章讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html
  • 视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww

重点:只考虑 左 和 右 就行,不需要考虑中

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root.val>p.val&&root.val>q.val) return lowestCommonAncestor(root.left,p,q);
        if(root.val<p.val&&root.val<q.val) return lowestCommonAncestor(root.right,p,q);
        return root;
    }
}

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

  • 题目链接:https://leetcode.cn/problems/insert-into-a-binary-search-tree/
  • 文章讲解:https://programmercarl.com/0701.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C.html
  • 视频讲解:https://www.bilibili.com/video/BV1Et4y1c78Y

该题简单,不用改树的结构,但是删除难,因为要改结构了
重点:当节点为空了,就是找到了要插入的位置!

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if(root==null) return new TreeNode(val);//当节点为空了,就是找到了要插入的位置!
        if(root.val>val) root.left=insertIntoBST(root.left,val);//要带返回值:该方法有返回值的
        else if(root.val<val) root.right=insertIntoBST(root.right,val);//要带返回值:该方法有返回值的
        return root;
    }
}

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

  • 题目链接:https://leetcode.cn/problems/delete-node-in-a-bst/
  • 文章讲解:https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html
  • 视频讲解:https://www.bilibili.com/video/BV1tP41177us

上题插入简单,不用改树的结构,但是该题删除难,因为要改结构了

递归结束的条件是文章中写了五种情况,可以简化为四种情况:
1.没找到,不删
2. 当值相等后,如果左节点为空,如果右节点为空,如果左右节点都不为空

最后一种情况的图解:
在这里插入图片描述
(该图来自B站算法随想录视频的截图)

class Solution {
  public TreeNode deleteNode(TreeNode root, int key) {
    if (root == null) return root;
    if (root.val == key) {
      if (root.left == null) {
        return root.right;
      } else if (root.right == null) {
        return root.left;
      } else {
        TreeNode cur = root.right;
        while (cur.left != null) {
          cur = cur.left;
        }
        cur.left = root.left;
        return root.right;
      }
    }

    if (root.val > key) root.left = deleteNode(root.left, key);
    if (root.val < key) root.right = deleteNode(root.right, key);
    return root;
  }
}

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

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

相关文章

Burp Suite Professional v2022.12.6 Crack

Burp Suite 被描述为通过 Port Swigger 提供给用户和开发人员的网络安全工具组合的重要过程。它有能力为开发人员提供服务&#xff0c;也有能力为具有竞争优势的用户提供卓越的研究。Burp Suite 基本上是一个集成平台&#xff0c;呈现给用户和开发人员&#xff0c;用于执行 Web…

[Zombodb那些事]Zombodb执行引擎

Zombodb执行引擎0.前言我们在使用Zombodb时&#xff0c;会使用一些SQL查询&#xff0c;例如&#xff1a;CREATE EXTENSION zombodb; DROP EXTENSION zombodb; CREATE INDEX idxtest_analyze_text ON test_analyze_text USING zombodb ((test_analyze_text.*)); DROP TABLE idxt…

机器学习实战:一文详解K近邻算法,包括原理解析+实战案例

各位同学好&#xff0c;今天我向大家介绍一下python机器学习中的K近邻算法。内容有&#xff1a; K近邻算法的原理解析&#xff1b;实战案例–红酒分类预测。 案例简介&#xff1a;有178个红酒样本&#xff0c;每一款红酒含有13项特征参数&#xff0c;如镁、脯氨酸含量&#x…

从 PageHelper 到 MyBatis Plugin

在很多业务场景下我们需要去拦截 SQL&#xff0c;达到不入侵原有代码业务处理一些东西&#xff0c;比如&#xff1a;历史记录、分页操作、数据权限过滤操作、SQL 执行时间性能监控等等&#xff0c;这里我们就可以用到 MyBatis 的插件 Plugin。下面我们来了解一下 Plugin 到底是…

代码随想录算法训练营第11天 20.有效的括号、150.逆波兰表达式求值、1047. 删除字符串中的所有相邻重复项

代码随想录算法训练营第11天 20.有效的括号、150.逆波兰表达式求值、1047. 删除字符串中的所有相邻重复项 有效的括号 力扣题目链接(opens new window) 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符…

JVM基础详解

1.JVM内存结构 1.1 内存结构划分 以上代码执行过程&#xff1a; 执行 javac 命令编译源代码为字节码 执行 java 命令 创建 JVM&#xff0c;调用类加载子系统加载 class&#xff0c;将类的信息存入方法区创建 main 线程&#xff0c;使用的内存区域是 JVM 虚拟机栈&#xff0c;开…

[JAVA安全]weblogic反序列化介绍及环境搭建

weblogic反序列化介绍 weblogic是一个常用的web中间件&#xff0c;它的反序列化漏洞也算是比较经典&#xff0c;而在weblogic里面其实反序列化漏洞大致分为两种&#xff0c;一个是基于T3协议的反序列化漏洞&#xff0c;一个是基于XML的反序列化漏洞&#xff0c;以后再说吧&…

用R语言画切线和法线

文章目录7 法线梯度、切线和法线切线和法线的绘制7 法线 梯度、切线和法线 为了书写方便&#xff0c;记xix1,x2,...,xnx_ix_1,x_2,...,x_nxi​x1​,x2​,...,xn​&#xff0c;∂f∂xi∂f∂x1,∂f∂x2,⋯∂f∂xn\frac{\partial f}{\partial x_i}\frac{\partial f}{\partial x_…

springboot+rabbitmq搭建mqtt协议实现订阅发布(亲测9w消息并发)

一、mqtt协议简单介绍 mqtt是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的轻量级通讯协议&#xff0c;通过订阅相应的主题来获取消息&#xff0c;是物联网&#xff08;Internet of Thing&#xff09;中的一个标准传输协议。 二、rabbitmq的安装部署 1. …

c# 随机数,c# 生成随机数,c# 生成区间随机数,c# 生成随机数组

c# 随机数&#xff0c;c# 生成随机数&#xff0c;c# 生成区间随机数&#xff0c;c# 生成随机数组 小试牛刀 先看结果 生成200-700之间的5个随机数 第1的随机数是&#xff1a;647 第2的随机数是&#xff1a;219 第3的随机数是&#xff1a;311 第4的随机数是&#xff1a;210 第5…

Redisson的看门狗机制

背景 据Redisson官网的介绍&#xff0c;Redisson是一个Java Redis客户端&#xff0c;与Spring 提供给我们的 RedisTemplate 工具没有本质的区别&#xff0c;可以把它看做是一个功能更强大的客户端&#xff08;虽然官网上声称Redisson不只是一个Java Redis客户端&#xff09; …

记录Maven的相关操作(笔记整理)

一、安装 我使用的是免安装版的&#xff0c;直接解压缩就可以使用。 二、配置环境变量 打开环境变量配置。右键计算机→属性→高级系统设置→高级→环境变量&#xff0c;在系统变量中配置。 配置MAVEN_HOME。在系统变量中新建&#xff0c;变量名MAVEN_HOME&#xff0c;变量值…

parquet

一、parquet结构 Row Group ​ --Column Chunk&#xff1a;一列对应一个Column Chunk ​ – Page&#xff1a;压缩和编码的单元&#xff0c;parquet的 min/max 索引是针对于page的&#xff0c;存在了文件的页脚。以前的版本是存储Column Chunk和Page的索引&#xff0c;导致在…

Linux命令scp用法

本文主要讲的是scp用法如果哪里不对欢迎指出&#xff0c;主页https://blog.csdn.net/qq_57785602?typeblog首先讲述一下scp用法并不是让你连接公司服务器后用的&#xff08;不是连接公司服务器使用&#xff09;&#xff0c;如果要使用的情况下那么请看下面&#xff1a;winr打开…

【C语言篇】请把这篇文章推给现在还对指针一知半解的童鞋~超生动图解,详细讲解,易懂,易学,让天下没有难懂的指针~

&#x1f331;博主简介&#xff1a;是瑶瑶子啦&#xff0c;一名大一计科生&#xff0c;目前在努力学习C进阶,JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛&#xff01; &#x1f4dc;所属专栏&#xff1a;C/C ✈往期博文回顾:进入内存,透彻理解数据类型存在的意义,整形…

[java拓展]Mysql数据库的基础指令,和JDBC的使用

1.关于mysql数据库 &#xff08;1&#xff09;概述 DBMS数据库管理系统&#xff0c;用来管理数据库&#xff0c;执行sql语句的东西&#xff0c;Mysql&#xff0c;oracle&#xff0c;sqlite这些严格来说不是数据库而是数据库管理系统&#xff0c;其中Mysql最常用&#xff0c;而…

马来酰亚胺聚乙二醇硅烷,MAL-PEG-Silane 结构,科研试剂溶于大部分有机溶剂

马来酰亚胺聚乙二醇硅烷&#xff0c;MAL-PEG-Silane 中文名称&#xff1a;马来酰亚胺聚乙二醇硅烷 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k。。。 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用…

剑指offer----C语言版----第十九天----面试题25:合并两个有序的链表

目录 1. 合并两个排序的链表 1.1 题目描述 1.2 解题思路 1.3 往期回顾 1. 合并两个排序的链表 原题链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09;1.1 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个…

new-Crack:StarUML 5.1.0 -2023

StarUML 用于敏捷和简洁建模的复杂软件建模器 当前版本&#xff1a;v5.1.0 主要特征 通用语言2 兼容 UML 2.x 标准元模型和图表&#xff1a;类、对象、用例、组件、部署、复合结构、序列、通信、状态图、活动、时间、交互溢出、信息流和剖面图。 SYSML 支持 支持使用 SysML 图…

SSM03_SpringMVC REST风格 SSM整合

01-SpringMVC简介SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端&#xff0c;所…