leetcode二叉搜索树部分笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

二叉搜索树

  • 1. 二叉搜索树的最小绝对差
  • 2. 二叉搜索树中第 K 小的元素
  • 3. 验证二叉搜索树


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

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

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

在这里插入图片描述
解题思路: 二叉搜索树,大小是 左 根 右。
首先确定边界条件: 当root == null时,直接返回。
其次每次递归逻辑:需要从小到大开始,首先去找二叉搜索树的最小值,也就是最左边的节点,找到后,判断pre是否为-1,如果是-1,则仅记录当前节点的值即可。如果不是-1,则说明当前节点比pre大,需要计算两者差值,然后pre更新为当前节点。
最后再去递归右子树节点。

class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans = Integer.MAX_VALUE;pre = -1;dfs(root);return ans;}public void dfs(TreeNode root) {if (root == null) {return;}dfs(root.left);if (pre == -1) {pre = root.val;} else {ans = Math.min(ans, root.val - pre);pre = root.val;}dfs(root.right);}
}

2. 二叉搜索树中第 K 小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。

在这里插入图片描述
解题思路: 中序遍历,然后存入list集合中,然后用list.get(k-1)即可。

class Solution {List<Integer> list = new ArrayList<>();public int kthSmallest(TreeNode root, int k) {dfs(root);return list.get(k-1);}public void dfs(TreeNode root){if(root == null){return;}dfs(root.left);list.add(root.val);dfs(root.right);}
}

3. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左
子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
在这里插入图片描述
解题思路: 中序遍历,判断左子树、根节点、右子树的值是否能遵循二叉搜索树,如果不遵循则让statue等于1,然后返回fasle。

class Solution {Long pre;int state;public boolean isValidBST(TreeNode root) {pre = Long.MIN_VALUE;state = 0;dfs(root);if(state == 1){return false;}return true;}public void dfs(TreeNode root){if(root == null){return;}dfs(root.left);if(pre == Long.MIN_VALUE){pre = (long)root.val;}else{if(pre >= root.val){state = 1;}pre = (long)root.val;}dfs(root.right);}
}

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

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

相关文章

如何创建属于自己的大语言模型:从零开始的指南

如何创建属于自己的大语言模型&#xff1a;从零开始的指南 为什么要创建自己的大语言模型&#xff1f; 随着人工智能的快速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;在各种场景中表现出了卓越的能力&#xff0c;例如文本生成、对话交互和内容总结等。虽然市场上…

计算机工作流程

分析下面的计算机工作流程&#xff1a; 1.取数a至ACC&#xff1a;PC程序寄存器自增1&#xff0c;变成0&#xff08;可以理解为PC初始从-1开始自增&#xff09;&#xff1b;接着PC把当前指令的地址给到MAR&#xff08;地址寄存器&#xff09;&#xff1b;MAR拿到当前地址后&…

ffmpeg翻页转场动效的安装及使用

文章目录 前言一、背景二、选型分析2.1 ffmpeg自带的xfade滤镜2.2 ffmpeg使用GL Transition库2.3 xfade-easing项目 三、安装3.1、安装依赖&#xff08;[参考](https://trac.ffmpeg.org/wiki/CompilationGuide/macOS#InstallingdependencieswithHomebrew)&#xff09;3.2、获取…

Elasticsearch8.17.0在mac上的安装

1、下载并安装 下载8.17版本es(目前最新版本)&#xff1a;Download Elasticsearch | Elastic 也可以通过历史版本列表页下载&#xff1a;Past Releases of Elastic Stack Software | Elastic 当然也可以指定具体版本号进行下载&#xff1a;Elasticsearch 8.17.0 | Elastic …

2025.01.15python商业数据分析top3

import pandas as pd# 文件路径为python文件位置下的相对路径 dwx pd.read_excel("电蚊香套装市场近三年交易额.xlsx", ) fmfz pd.read_excel("防霉防蛀片市场近三年交易额.xlsx") msmc pd.read_excel("灭鼠杀虫剂市场近三年交易额.xlsx") mz…

解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题

配置一下apache里面的配置文件&#xff1a;httpd.conf 和 httpd.vhosts.conf httpd.conf httpd-vhosts.conf 重启服务 展示&#xff1a; 浏览器中中文乱码问题&#xff1a;

golang异常

panic如果不处理会导致应用进程挂掉 defer recover可以处理这种情况 一个recover只处理自己协程 产生panic的情况 空指针 数组越界 空map中添加键值对 错误&#xff0c;error接口&#xff0c;不严重 error.wrapof解决嵌套问题或者error.unwrap erroe.is方法&#xff0c;判断是…

redis库基础知识

redis库 Redis 是一个开源的内存数据库&#xff0c;提供了丰富的方法和命令来操作和管理数据库中的数据。下面是 Redis 库中一些常用的方法的介绍&#xff1a; set(key, value): 设置指定键的值get(key): 获取指定键的值delete(key): 删除指定的键和对应的值exists(key): 判断…

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…

MacOS下PostIn安装配置指南

PostIn是一款开源免费的接口管理工具&#xff0c; 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业&#xff0c;实现对数据和系统的完全控制。 &#xfeff; &#xfeff; 1、MacOS服务端安装 Mac安装包下载地址&#xff1a;下载Mac安…

最适合智能体的身份认证技术:对比OpenID Connect、API keys、did:wba

最适合智能体的身份认证技术&#xff1a;对比OpenID Connect、API keys、did:wba 智能体需要新的身份认证技术 智能体对身份认证技术提出了新的需求&#xff0c;其中最重要的一个就是互联互通&#xff0c;特别是让任意两个智能体都能够互联互通。 其中的原理很简单&#xff1a;…

排序算法(7):堆排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 堆排序 堆排序是一种基于堆数据结构的排序算法。堆是一个近似完全二叉树的结构&#xff0c;即除了最后一层外&#xff0c;每一层都必须填满&#xff0c;且最后一层从左往右填充。 堆可以分为大根堆和小根堆。在大根堆中&…

【余弦相似度】是否需要做归一化

各种标签的向量,做 加权计算后得到一个综合向量,计算余弦相似度之前,可选的,做一个归一化:aggregated_vector /= np.linalg.norm(aggregated_vector)这段代码实现的是 归一化 操作,具体来说,它使用了 L2 范数 来归一化 aggregated_vector 向量。归一化的目的 归一化是为…

多核CPU调度是咋搞的?

其实很多情况下都有 这样的疑问 为什么多核CPU用着用着会“躺平”&#xff1f; 为什么手机有 8 核&#xff0c;跑分时性能却不是核心数的翻倍&#xff1f; 答案的钥匙&#xff0c;就藏在多核CPU的调度机制里。 为了更直观地理解&#xff0c;以一个《王者荣耀》游戏服务器为例…

Qt Quick:CheckBox 复选框

复选框不止选中和未选中2种状态哦&#xff0c;它还有1种部分选中的状态。这3种状态都是Qt自带的&#xff0c;如果想让复选框有部分选中这个状态&#xff0c;需要将三态属性&#xff08;tristate&#xff09;设为true。 未选中的状态值为0&#xff0c;部分选中是1&#xff0c;选…

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…

【信息系统项目管理师】高分论文:论信息系统项目的进度管理(一体化智能公共数据平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理2、定义活动3、排列活动顺序5、制定进度计划6、控制进度论文 2022年9月,我作为项目经理参加了XX市的一体化智能公共数据平台项目的建设工作,2022年是XX市政府数字化改革的元年,全市上下…

Docker 设置代理的三种方法(2024年12月19日亲自测试)

Docker 设置代理的三种方法 在 Docker 中设置代理是非常常见的需求&#xff0c;尤其是在某些需要通过代理访问外部资源的网络环境下。本文将介绍三种配置 Docker 使用代理的常见方法&#xff1a;通过 daemon.json 配置镜像加速器、通过 daemon.json 配置 HTTP/HTTPS 代理、以及…

【docker】如何打包前端并运行

前端使用 Vue 3 Vite 1.use npm run preview 运行 0.项目根目录下新建.env文件 VITE_BASE_API_prodhttp://127.0.0.1:5000/api # 线上环境 VITE_MOCK_API_prodapi # 本地模拟数据 VITE_BASE_API_devhttp://127.0.0.1:5000/ap…

【mysql】1205 -Lock wait timeout exceeded; try restarting transaction

问题&#xff1a; mysql8执行SQL提示下面错误&#xff1a; 1205 -Lock wait timeout exceeded; try restarting transaction 1205-超过锁定等待超时&#xff1b;尝试重新启动事务 可能的原因&#xff1a; 事务冲突&#xff1a;多个事务同时尝试修改同一行数据&#xff0c;导…