代码随想录Day16

Day16

二叉树part06

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

题目描述

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值。

示例

输入:root = [4,2,6,1,3]
输出:1

题目链接

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

思路

给的是二叉搜索树, 因此采用中序遍历, 这样的得到的结果顺序是升序的。

因此, 求最小差值一定是相邻的两个节点的值。先初始化一个最大值Integer.MAX_VALUE, 使用pre记录上一个节点, 每次用root.val - pre.val比较和已经记录的result进行比较, 存入小的数。即可求解

解决代码
class Solution {int result = Integer.MAX_VALUE;TreeNode pre = null;public int getMinimumDifference(TreeNode root) {if(root == null){return 0;}traveral(root);return result;}public void traveral(TreeNode root){if(root == null){return;}traveral(root.left);if(pre != null){result = Math.min(result, root.val - pre.val);}pre = root;traveral(root.right);}
}

LeetCode 501.二叉搜索树中的众数

题目描述

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

示例

输入:root = [1,null,2,2]
输出:[2]

题目链接

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

思路

给的是一个含重复值的二叉搜索树,依旧采用中序遍历,这样遍历得到的结果,是有序的。

初始化一个链表,用于存储众数值,再使用count记录每次出现的次数, MAXCount记录众数值。前驱节点和当前节点相同,count自增, 否则置为一。比较当前记录的次数是否大于MAXCount是则替换

解决代码
class Solution {TreeNode pre = null;ArrayList<Integer> reslist = new ArrayList<>();//存储结果,题目明确,可能不止一个众数int count = 0;//记录出现次数int MAXCount = 0;//记录最多出现的次数public int[] findMode(TreeNode root) {travesal(root);int[] res = new int[reslist.size()];//链表转换为数组输出for(int i = 0; i < reslist.size(); i++){res[i] = reslist.get(i);}return res;}public void travesal(TreeNode root){if(root == null){return;}travesal(root.left);if(pre == null || pre.val != root.val){count = 1;}else{count++;}//更新结果if(count > MAXCount){reslist.clear();reslist.add(root.val);MAXCount = count;}else if(count == MAXCount){reslist.add(root.val);}pre = root;travesal(root.right);}
}

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

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

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

示例

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。

题目链接

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

思路
  1. 递归终止条件:当前节点为空或等于p/q时返回。
  2. 递归左右子树:获取左右子树的查找结果。
  3. 判断LCA:若左右子树均找到节点,当前节点为LCA;否则返回非空结果。
解决代码
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null){return null;}if(root == p || root == q){//递归返回条件,找到p 获 qreturn root;}TreeNode left = lowestCommonAncestor(root.left, p, q);//对左子树递归TreeNode right = lowestCommonAncestor(root.right, p, q);//对右子树递归if(left != null && right != null){//找到两个节点return root;}else if(left != null && right == null){//只找到一个节点return left;}else if(left == null && right != null){return right;}else{//没找到节点return null;}}
}

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

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

相关文章

用通义大模型写爬虫程序,汇总各科成绩

需求&#xff1a;根据各科网址&#xff0c;输入学号、姓名查询成绩。 中间反反复复很多次&#xff0c;本文只记下重点的几次和大模型的沟通历史。 输入界面 查询界面 round0&#xff08;最初的问题&#xff09; 请在windows下&#xff0c;使用python的selenium库&#xff0…

Java算法OJ(12)

目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道的练习题&#xff0c;欢迎大家在评论区多多交流&#xff0c;废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目&#xff1a;斐波那契数列_牛客题霸…

使用傅里叶变换测量声卡的频率失真

文章目录 一、说明二、关于声卡的技术详述三、实验代码获取四、结论 一、说明 假如我希望使用我的声卡来模拟软件无线电&#xff0c;利用声音而不是射频信号。我的声卡能胜任这项任务吗&#xff1f;本文将研究一种技术来找出答案。另外&#xff0c;需要了解音频技术的读者也可…

LeetCode 解题思路 18(Hot 100)

解题思路&#xff1a; 继承 LinkedHashMap&#xff1a; 内置双向链表&#xff0c;自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑&#xff1a; 覆盖 removeEldestEntry&#xff0c;当元素数量超过 capacity 时&#xff0c;移除最旧条目。removeEldestEntry 方法提供钩子&…

JS基础部分

引入方式 内部脚本 外部脚本 变量 使用let声明变量&#xff0c;弱类型&#xff0c;使用const声明常量 因为箭头函数中this指针有问题&#xff0c;会默认指向父级对象 DOM 文档对象模型&#xff0c;将标记语言的各个部分封装成对应的对象。js通过dom就能够对html进行操作 …

Linux与深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介绍 在上一节已经完成了客户端和服务端基本的HTTP通信&#xff0c;但是前面的传递并没有完全体现出HTTP的序列化和反序列化&#xff0c;为了更好得理解其工作流程&#xff0c;在本节会以更加具体的方式分析到HTTP序列化和反序列化 本节会在介绍…

QT入门笔记2

目录 一、前言 二、串口助手实现 2.1、串口 2.1.1、可用串口信息-QSerialPortInfo 2.1.2、打开串口-QSerialPort 2.1.3、串口发送接收信息 2.2、定时器-QTimer 2.3、常用属性类型转换&#xff08;会更新&#xff09; 2.4、子控件组规则命名优化 一、前言 这个是学习Q…

DeepSeek(3):DeepSeek R1 提示词⼯程

1 提示词⼯程 5W1H&#xff08;What, Who, When, Where, Why, How&#xff09;是⼀种常⽤的信息收集和指令下达的⽅法。以下是根据这个⽅法为DeepSeek R1模型下指令的例⼦&#xff0c;以“学习⼤模型应⽤开发”为例&#xff1a; &#xff08;1&#xff09;What&#xff08;是什…

Linux入门 全面整理终端 Bash、Vim 基础命令速记

Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵&#xff1f;于是乎&#xff0c;这份手册就是为你准备的高效学习指南&#xff01;我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式&#xff0c;让你快速学…

RBA+minibatch的尝试

目录 还是咬着牙来写 RBA了 JAX JAX->TORCH torch tensor的变形 pytorch怎么把一个【3,3,5】的tensor变成【3,10,5】&#xff0c;多的用0填充 pytorch如何把shape【100】转成【100,1】 把torch shape【100,1】变成【100】 SQUEEZE grad_fn 不能两次反向传播 还…

Jupyter notebook的安装与使用

jupyter notebook的安装需要在已经安装配置好的conda环境下 win r 打开运行窗口 输入cmd回车 在cmd窗口中输入以下命令 conda install jupyter notebook安装完成后启动 jupyter notebook 也是在cmd窗口 输入 : jupyter notebook运行成功后第一次打开的时候需要选择一个浏览…

如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC&#xff0c;奈何核心/线程太少了。最近想在 Ubuntu 上搞搞&#xff0c;但是 snap 安装的 ISPC不知道为什么只能单核&#xff0c;很奇怪&#xff0c;就想着编译一下&#xff0c;需要 Clang 和 LLVM。但是 Ubuntu 很搞&#xff0c;他的很多软件版本是…

特殊的数字排序

0特殊的数字排序 - 蓝桥云课 问题描述 小明被挑选去参加一个ACM比赛。他的任务是解决一个很特别的问题&#xff1a;给定一个整数数组&#xff0c;但是只能通过交换任意两个数的方式来排序。听起来很简单对吗&#xff1f;但是这个问题的难点在于&#xff0c;只有某些数字是可以…

汽车感性负载-智能高边钳位能量计算

随着汽车电子技术的发展&#xff0c;新的电子电气架构下&#xff0c;越来越多的执行部件在车身出现&#xff0c;比如电磁阀、风机、水泵、油泵、雨刮继电器等常用的执行器&#xff0c; 它们一般都表现为感性特点。驱动这些负载的最简单和最常见的方法是将它们连接到高边侧开关(…

量化交易学习笔记02:双均线策略

双均线策略示例 个股&#xff1a;中国平安 回测日期&#xff1a;2022-5-1至2023-5-1 短均线&#xff1a;5天 长无线&#xff1a;10天 代码&#xff1a; def initialize(context):# 初始化此策略# 设置我们要操作的股票池, 这里我们只操作一支股票# """标的&qu…

利用余弦相似度在大量文章中找出抄袭的文章

我前面的2篇文章分别讲了如果利用余弦相似度来判断2篇文章的相似度&#xff0c;来确定文章是否存在抄袭&#xff0c;和余弦相似度的原理&#xff0c;即余弦相似度到底是怎么来判断文章的相似性高低的等等。这一篇再说下&#xff0c;对于文章字数多和大量文章时&#xff0c;如果…

在 Kaggle 中绘制中文乱码解决

在 Kaggle 中绘制中文时&#xff0c;需要设置 Matplotlib 的字体&#xff0c;否则中文会显示为乱码。可以使用 SimHei&#xff08;黑体&#xff09;或 Microsoft YaHei&#xff08;微软雅黑&#xff09;。 解决方案 使用 matplotlib 设置中文字体在 Kaggle 安装 SimHei 字体 …

在 Ubuntu 服务器上使用宝塔面板搭建博客

&#x1f4cc; 介绍 在本教程中&#xff0c;我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板&#xff0c;并使用 Nginx PHP MySQL 搭建一个博客&#xff08;如 WordPress&#xff09;。 主要步骤包括&#xff1a; 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…

Linux线程

1.线程概念 在一个程序里的一个执行路线就叫做线程(thread)&#xff0c;更准确定义&#xff1a;线程是一个进程内部的控制序列 进程至少有一个执行路线&#xff0c;线程在进程内部运行&#xff0c;本质是在进程地址空间内运行&#xff0c;在Linux系统中&#xff0c;CPU眼中&a…

【TI MSPM0】GPIO学习

一、文件样例查找 以GPIO软件轮询为例 下面的四个文件夹分别为不同开发环境提供支持 二、工程导入 1.点击file-点击import project 2.点击browse 3.找到对应的文件打开&#xff0c;选择 推荐使用ticlang,能够提供更加优化的效率 点击finish 三、工程学习 1.readme 文件 &a…