java数据结构与算法刷题-----LeetCode98. 验证二叉搜索树

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 1. 法一:利用BST性质进行递归
    • 2. 法二:利用中序遍历

在这里插入图片描述

1. 法一:利用BST性质进行递归

解题思路:时间复杂度O(n),空间复杂度O(n)
  1. 二叉搜索树必须满足,并且左子树的值都小于当前结点,右子树的值都大于当前结点。
  2. 所以我们依次遍历每个结点,并且传入这个结点的合理取值范围。如果它是上一个结点的左孩子,就不能大于父亲。如果它是上一个结点的右孩子,就不能小于父亲
代码

在这里插入图片描述

class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);}public boolean isValidBST(TreeNode node, long lower, long upper) {if (node == null) return true;//如果node为null,返回trueif (node.val <= lower || node.val >= upper) return false;//如果当前值,小于最小值,或者大于最大值,都不符合二叉搜索树//当前结点的左子树的合理取值范围是,不大于当前结点值,且不小于lower//当前结点右子树的合理取值范围,不小于当前结点,且不大于upper。return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);}
}

2. 法二:利用中序遍历

解题思路:时间复杂度O(n),空间复杂度O(n)

二叉搜索树BST的中序遍历顺序,一定是一个递增的序列,所以中序遍历过程中,判断是否后一个值>前一个值,如果是的话,那么这就不是一课BST

代码
  1. 使用一个全局变量,从而使用递归
    在这里插入图片描述
class Solution {private long pre = Long.MIN_VALUE;//保存中序遍历前一个值public boolean isValidBST(TreeNode root) {if (root == null) return true;//如果左子树不符合BST树,或者前一个值>=当前值,则不是BSTif (!isValidBST(root.left) || root.val <= pre)return false;pre = root.val;//当前值变成下一次的prereturn isValidBST(root.right);//然后看右子树}}
  1. 不能使用全局变量的情况下,只能用迭代法
    在这里插入图片描述
class Solution {public boolean isValidBST(TreeNode root) {Deque<TreeNode> stack = new LinkedList<TreeNode>();//模拟栈double inorder = -Double.MAX_VALUE;//中序遍历的前一个值while (!stack.isEmpty() || root != null) {//先左while (root != null) {stack.push(root);root = root.left;}//然后中root = stack.pop();// 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树if (root.val <= inorder) {return false;}inorder = root.val;//更新inorder//然后右root = root.right;}return true;}
}

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

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

相关文章

CUDA 编程指南 —— 编程接口之CUDA Runtime

目录 CUDA Runtime 运行时在 cudart 库中实现&#xff0c;该库通过 cudart.lib 或 libcudart.a 静态链接到应用程序&#xff0c;或者通过 cudart.dll 或 libcudart.so 动态链接到应用程序。需要 cudart.dll 和/或 cudart.so 进行动态链接的应用程序通常将它们作为应用程序安装…

音视频开发之旅(70)- 人脸修复画质增强之CodeFormer

目录 1. 效果展示和使用简介 2. CodeFormer原理浅析和代码实现分析 3. SDWebui中使用 4. 关键细节&#xff1a;保真度和质量之间的平衡 5. 参考资料 一、效果展示和使用简介 1.1 老旧照片修复 1.2 对AI生成照片修复 1.3 人脸修复 1.4 人脸色彩增强 1.5 去除人脸打码 1.6…

k8s基础以及kubeadm安装部署

目录 一、什么是k8s&#xff1f; 二、k8s的特性 三、核心组件以及工作流程 核心组件&#xff1a; 工作流程&#xff1a; 四、k8s网络 五、kubeadm部署 一、什么是k8s&#xff1f; K8S 的全称为 Kubernetes&#xff0c;用于自动部署、扩展和管理“容器化&#xff08;con…

【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录 A 宇宙的终结题目大意主要思路代码 B 爱恨的纠葛题目大意主要思路代码 C 心绪的解剖题目大意主要思路代码 D 友谊的套路题目大意主要思路代码 E 未来的预言题目大意主要思路代码 G 人生的起落题目大意主要思路代码 I 时空的交织题目大意主要思路代码 J 绝妙的平衡题目…

Linux7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

DC-DC升压模块变换器微型SIP小体积5v12v15v24v转100V110V150V180V200V250V300V500V800VDC

0.2~2W&#xff0c;微型SIP&#xff0c;单/双输出DC/DC变换器 F特征 效率高达88%1000VDC/3000VDC隔离MTBF>2,000,000小时低成本输入5、12、15和24VDC输出100,110,150,180,200,250,300,500,800 VDC 50,55,75,90,100,125,150,250和400 VDC 温度性能-40℃~85℃UL 94V-0封装…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

喜讯!爱基百客荣获“适用于高淀粉果实的ATAC-seq方法”专利

喜讯来啦&#xff01; 爱基百客荣获ATAC-seq的技术专利~ ATAC-seq技术的相关研究很多&#xff0c;特别是在细胞系和动物组织中的应用较广&#xff0c;而植物样本由于存在细胞壁结构&#xff0c;且代谢物质较多&#xff0c;抽核相对困难。因此&#xff0c;限制了该技术的应用。…

Elasticsearch入门-环境安装ES和Kibana

Elasticsearch入门-环境安装ES和Kibana 安装 ES Windows安装Kibana 安装 安装 ES Windows安装 ① 下载压缩包并解压官网链接&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ② 启动 ES ,切换到bin目录下&#xff0c;点击elasticsearch.bat文件 启动报错&#…

C++ //练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。

C Primer&#xff08;第5版&#xff09; 练习 8.13 练习 8.13 重写本节的电话号码程序&#xff0c;从一个命名文件而非cin读取数据。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /***************************************…

Vue.js+SpringBoot开发大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统&#xff0c;旨…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿89yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

高效项目计划的关键因素:制定前必须要考虑的事项

制定项目计划前需要考虑哪些因素&#xff1f;项目计划是一份重要的文件&#xff0c;它概述了项目的范围、目标、时间表、资源和预算。它作为项目团队和涉众的路线图&#xff0c;帮助每个人在整个项目生命周期中保持一致。在本文中我们将概述如何制定合理的项目计划。 1、定义项…

恒峰森林应急消防泵:守护绿色生命线的重要装备

随着城市化进程的加快&#xff0c;人们对于生态环境的保护意识日益增强。森林作为地球上重要的生态系统&#xff0c;承担着净化空气、调节气候、保护水源等诸多功能。然而&#xff0c;由于自然灾害和人为因素&#xff0c;森林火灾时有发生&#xff0c;给生态环境带来严重破坏。…

Kotlin多线程

目录 线程的使用 线程的创建 例一&#xff1a;创建线程并输出Hello World Thread对象的用法 start() join() interrupt() 线程安全 原子性 可见性 有序性 线程锁 ReentrantLock ReadWriteLock 线程的使用 Java虚拟机中的多线程可以1:1映射至CPU中&#xff0c;即…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例&#xff1a;监控 Flask 应用7.1.3 拓展案例 1&#xff1a;使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2&#xff1a;使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例&#xff1a;Fl…

【福建游戏业:低调崛起的区域力量】

在前面的文章中&#xff0c;我们已经依次介绍了上海、北京、广州、深圳、成都、杭州等地的游戏行业发展现状。本文要向大家介绍的最后一个地区--福建。 尽管福建省的经济总体实力相对较弱&#xff0c;但近年游戏业焕发出勃勃生机&#xff0c;涌现出几家优秀游戏企业&#xff0c…

airserver2024mac苹果手机电脑投屏工具下载

AirServer的稳定性如磐石般坚固&#xff0c;当提及投屏软件的核心要素时&#xff0c;稳定性无疑是用户最为关心的方面之一。在这方面&#xff0c;AirServer堪称投屏领域的佼佼者&#xff0c;其稳定性表现足以让用户放心依赖。 首先&#xff0c;AirServer采用了先进的投屏技术&…