当前位置: 首页 > news >正文

代码随想录 day 18 二叉树

第六章 二叉树part06

详细布置
530.二叉搜索树的最小绝对差

需要领悟一下二叉树遍历上双指针操作,优先掌握递归
题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html
视频讲解:https://www.bilibili.com/video/BV1DD4y11779

501.二叉搜索树中的众数

和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。
可以先自己做做看,然后看我的视频讲解。
https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html
视频讲解:https://www.bilibili.com/video/BV1fD4y117gp

236. 二叉树的最近公共祖先

本题其实是比较难的,可以先看我的视频讲解
https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%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/BV1jd4y1B7E2

530.二叉搜索树的最小绝对差

题目链接

https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/

解题思路

还是二叉搜索的中序遍历单调递增的特性,判断相邻俩个节点的差值的绝对值和最小值比较,最终求出最小值
递归误区:想着直接在getMinimumDifference函数进行递归,但是遇到空节点 返回int的值是什么? 发现终止条件确定不下来,所以要重新考虑递归函数的参数和返回值。
这时考虑到新建递归函数,遇到null节点return ,递归函数返回值是void,参数就是节点,因为每次操作的全局变量就是结果,不需要返回值。

code

    private TreeNode pre=null;int min=Integer.MAX_VALUE;public int getMinimumDifference(TreeNode root) {if(root ==null ) return 0;recursion(root);return min;}public void recursion(TreeNode root){if(root==null){return;}recursion(root.left);if(pre!=null&&Math.abs(root.val-pre.val)<min){min=Math.abs(root.val-pre.val);}pre=root;recursion(root.right);}

501.二叉搜索树中的众数

题目链接

https://leetcode.cn/problems/find-mode-in-binary-search-tree/

解题思路

中序遍历相邻,要考虑如何更新,当前和前一个相同,count++;

code

    ArrayList<Integer> resList;int maxCount;int count;TreeNode pre;public int[] findMode(TreeNode root) {if(root==null){return null;}resList = new ArrayList<>();maxCount = 0;count = 0;pre = null;recursion(root);int[] res = new int[resList.size()];for (int i = 0; i < resList.size(); i++) {res[i] = resList.get(i);}return res;}public void recursion(TreeNode root){if(root==null){return;}recursion(root.left);int rootValue=root.val;// 计数if (pre == null || rootValue != pre.val) {count = 1;} else {count++;}// 更新结果以及maxCountif (count > maxCount) {resList.clear();resList.add(rootValue);maxCount = count;} else if (count == maxCount) {resList.add(rootValue);}pre = root;recursion(root.right);}

236. 二叉树的最近公共祖先

题目链接

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/

解题思路

后序遍历的回溯过程
如果p节点下有q这种情况,代码已经包含了这种逻辑,就是递归终止条件如果遇到p就是直接返回p,根本不用向下递归是否有q了,题目说了一定有p和q节点,所以最后的回溯到第一层后最近公共祖先就是p。

code

    //后序遍历回溯的思想,把找到的p和q向上返回,左右中,中的时候判断是否符合public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//1.递归函数的终止条件//等于null返回nullif(root==null){return null;}//等与p或q返回给上层的递归函数if(root==p||root==q){return root;}//单层递归逻辑,left或right要么是null要么是p或qTreeNode left=lowestCommonAncestor(root.left,p,q);TreeNode right=lowestCommonAncestor(root.right,p,q);//处理中的逻辑//left和right都不等于null,那么一定包含了p和q ,这个root的节点就是最近的公共祖先if(left!=null&&right!=null){return root;}//left 找到了p或q节点,回溯给上一层if(left!=null){return left;}//right 找到了p或q节点,回溯给上一层if(right!=null){return right;}//这里是left和right都等于null,那么返回nullreturn null;}

image.png

相关文章:

代码随想录 day 18 二叉树

第六章 二叉树part06 详细布置 530.二叉搜索树的最小绝对差 需要领悟一下二叉树遍历上双指针操作&#xff0c;优先掌握递归 题目链接/文章讲解&#xff1a;https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%B…...

降雨量预测 | Matlab基于ARIMA-RBF降雨量预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注&#xff1a;程序和数据放在一个文件夹。 程序语言为matlab&#xff0c;程序可出预测效果图&#xff0c;指标图; 代码特点&#xff1a;参数化编程、参数可方便更改、代…...

包含示例和模板的流程文档指南

当您的业务扩展时&#xff0c;您会得到越来越多的移动部件&#xff0c;并且需要有人来跟踪复杂性。人员和任务需要以尽可能最高效的方式进行组织&#xff0c;并且您必须找到某种方法让员工知道如何执行有效完成工作所需的流程。 为了使流程可重复&#xff0c;需要对其进行记录…...

51单片机嵌入式开发:15、STC89C52RC操作蜂鸣器实现一个music音乐播放器的音乐盒

STC89C52RC操作蜂鸣器实现一个music音乐播放器的音乐盒 1 概述2 蜂鸣器操作方法3 蜂鸣器发出音声4 硬件电路5 软件实现6 整体工程&#xff1a;7 总结 1 概述 要实现一个基于STC89C52RC单片机的音乐盒&#xff0c;可以按照以下步骤进行&#xff1a; &#xff08;1&#xff09;硬…...

B树(B-Tree)数据结构

1. 什么是B树&#xff1f; B树&#xff08;B-Tree&#xff09;是一种多路搜索树&#xff0c;用于存储和检索大量数据。它是自适应的&#xff0c;适用于各种存储设备和各种数据量。B树的特点是高效的搜索、插入和删除操作&#xff0c;且可以在各种情况下保持树的平衡。 2. B树…...

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市…...

数据结构——队列(链式结构)

一、队列链式结构定义 队列的链式存储结构是一种用链表实现的队列,它不像顺序存储结构那样需要预先分配固定大小的空间。链式存储结构的队列由节点组成,每个节点包括数据和指向下一个节点的指针。队列的链式存储结构可以动态地分配内存,更灵活地处理数据。在链式存储结构中…...

解决GoLand添加GOROOT提示The selected directory is not a valid home for Go Sdk的问题

现象 解决 在Go安装路径下找到zversion.go文件&#xff0c;我的在D:\Program Files\Go1.21.1\src\runtime\internal\sys下面 打开文件&#xff0c;添加如下内容&#xff1a; const TheVersion go1.21.1保存后再重新添加GOROOT即可...

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图&#xff1a;STC8H8K64URA8889开发板&#xff0c;使用P2口I2C接口&#xff1a; 2.实物连…...

【Python其他检查字符串占字节数的方法】

在Python中&#xff0c;检查字符串在特定编码下占用的字节数&#xff0c;最标准且常用的方法是通过字符串的.encode()方法将字符串转换为字节串&#xff0c;然后使用len()函数来获取这个字节串的长度。这是因为字符串&#xff08;在Python 3中&#xff09;是以Unicode形式存储的…...

梧桐数据库: 数据库技术中的重写子查询技术

数据库技术中的重写子查询技术&#xff0c;是数据库查询优化的一种重要手段。该技术主要通过改变子查询的形式&#xff0c;使其在执行效率和性能上得到优化。以下是对重写子查询技术的详细解析&#xff1a; 一、定义与目的 定义&#xff1a;重写子查询技术是指在数据库查询优…...

PHP连接MySQL数据库

PHP本身不具备操作MySQL数据库的能力&#xff0c;需要借助MySQL扩展来实现。 1、PHP加载MySQL扩展&#xff1a;php.ini文件中。&#xff08;不要用记事本打开&#xff09; 2、PHP中所有扩展都是在ext的文件夹中&#xff0c;需要指定扩展所在路径&#xff1a;extension_dir。 3、…...

STM32自己从零开始实操:PCB全过程

一、PCB总体分布 以下只能让大家看到各个模块大致分布在板子的哪一块&#xff0c;只能说每个人画都有自己的理由&#xff1a; 电源&#xff1a;从外部接入电源&#xff0c;5V接到中间&#xff0c;向上变成4V供给无线&#xff0c;向下变成3V供给下面的接口&#xff08;也刻意放…...

error `slot` attributes are deprecated vue/no-deprecated-slot-attribute

旧的代码如下&#xff1a; <template slot"title">{{ item.title }}</template> {{ item.title }} 是一个模板标签&#xff0c;它在模板中插入了一个元素&#xff08;slot&#xff09;&#xff0c;并指定了元素的名称为 “title”。这个标签在模板中显示…...

Websocket自动消息回复服务端工具

点击下载《Websocket自动消息回复服务端工具》 1. 前言 在进行Websocket开发时&#xff0c;前端小伙伴通常是和后端开发人员同步进行项目开发&#xff0c;经常会遇到后端开发人员接口还没开发完&#xff0c;也没有可以调试的环境&#xff0c;只能按照接口文档进行“脑回路开发…...

【软考】UML中的关联关系

目录 一、说明二、具体类型2.1 普通关联2.2 单向关联2.3 双向关联2.4 自关联2.4 聚合关系&#xff08;Aggregation&#xff09;2.5 组合关系&#xff08;Composition&#xff09; 三、关联关系中的多重性 一、说明 1.UML&#xff08;Unified Modeling Language&#xff0c;统一…...

贪吃蛇超精讲(C语言)

前言 如果你还是个萌新小白&#xff0c;那么该项目的攻克过程一定会十分艰难。虽然作者已经将文章尽可能写的逻辑清晰&#xff0c;内容详细。但所谓“纸上得来终觉浅”&#xff0c;在讲到陌生结构和函数时&#xff0c;大家请一定自己动手去敲一遍代码&#xff0c;这很重要&…...

掌握Rust:函数、闭包与迭代器的综合运用

掌握Rust&#xff1a;函数、闭包与迭代器的综合运用 引言&#xff1a;解锁 Rust 高效编程的钥匙函数定义与模式匹配&#xff1a;构建逻辑的基石高阶函数与闭包&#xff1a;代码复用的艺术迭代器与 for 循环&#xff1a;高效数据处理的引擎综合应用案例&#xff1a;构建一个简易…...

【LeetCode】80.删除有序数组中的重复项II

1. 题目 2. 分析 3. 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) < 3:return len(nums)i 0j 1k 2while(k < len(nums)):if (nums[i] nums[j]):while(k < len(nums) and nums[j] nums[k] ):k1if (k < len(nums…...

Armpro搭建教程全开源版的教程

Armpro搭建教程 全开源版的教程&#xff0c;其他未知 资源宝整理分享 www.httple.net 首先ssh执行指令安装运行环境 yum install java-1.8.0-openjdk* -y导入文件服务器 导入arm.zip到www目录下然后解压 导入jar包.zip到www目录然后解压 导入basic.zip到www目录然后解压在宝塔…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...