LeetCode刷题之HOT100之验证二叉搜索树

news2024/11/24 4:55:07

1、题目描述

在这里插入图片描述

2、逻辑分析

要求给定的根节点是否是有效的二叉树。有效的二叉搜索树定义如上。那么如何求解呢?题解给出了两张求解方法:递归、中序遍历。这边倾向于中序遍历,中序遍历后的二叉树是升序排序的,以这个性质即可解题。

3、代码演示

public boolean isValidBST(TreeNode root) {
        // 使用一个栈来辅助进行中序遍历
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        // 初始化一个比任何可能的节点值都要小的值,用来比较后续的中序遍历值
        double temp = -Double.MAX_VALUE;
        // 当栈不为空或者当前节点不为空时,循环继续
        while(!stack.isEmpty() || root != null){
            // 将当前节点以及它的所有左子节点压入栈中
            while(root != null){
                stack.push(root);
                root = root.left;
            }
             // 从栈中弹出一个节点,并检查其值是否满足BST的特性
            root = stack.pop();
            // 如果当前节点的值小于等于前一个中序遍历节点的值(temp),则不是BST  
            // 注意:这里使用了小于等于,因为BST中不允许有重复值 
            if(root.val <= temp){
                return false;
            }
            // 更新中序遍历的节点值
            temp = root.val;
            // 继续遍历右子树
            root = root.right;
        }
        // 如果遍历完整个树后都没有返回false,则说明这是一个有效的BST
        return true;
    }

这个算法使用了中序遍历的思想,但并不是真正地进行中序遍历并存储所有值。它只维护了一个变量 temp 来保存上一个遍历到的节点的值,并与当前节点的值进行比较。如果满足BST的特性,则继续遍历;否则,直接返回 false

4、复杂度分析

  • 时间复杂度:O(n)。n为节点数,需要访问n个节点。
  • 空间复杂度:O(n)。需要一个栈来存节点。

ok,又水了一题哈哈哈哈,crying!!!

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

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

相关文章

【GD32】 TIMER通用定时器学习+PWM输出占空比控制LED

扩展&#xff1a;PWM波形输出捕获 这里写目录标题 一、简介二、具体功能描述1、时钟源的选择&#xff1a;2、预分频器&#xff1a;3、计数模式&#xff1a;向上计数模式&#xff1a;向下计数模式&#xff1a;中央对齐模式&#xff1a; 4、捕获/比较通道 输入捕获模式 输出…

辽宁普通测径仪升级智能测径仪后都有哪些改进?

关键字: 普通测径仪, 智能测径仪, 测径仪升级, 测径仪特点, 智能测径仪优势, 目前多数厂家测径仪的数据处理方式是单片机计算出最终结果&#xff0c;然后传输到工控机后期处理。这样的电路系统对轧钢现场的高温、高粉尘和强电磁干扰的环境适应性很差&#xff0c;使得同一厂家、…

node 版本控制

官网下载 nvm 包 查看node和npm版本&#xff1a;https://github.com/coreybutler/nvm-windows/releases 2、查看nvm是否安装成功 nvm3、基本使用 1、查看当前node可用版本 nvm ls2、查看当前使用的node版本 nvm current3、安装指定node版本 nvm install 19.9.04、切换版…

【第三篇】SpringSecurity请求流程分析

简介 本篇文章主要分析一下SpringSecurity在系统启动的时候做了那些事情、第一次请求执行的流程是什么、以及SpringSecurity的认证流程是怎么样的,主要的过滤器有哪些? SpringSecurity初始化流程 1.加载配置文件web.xml 当Web服务启动的时候,会加载我们配置的web.xml文件…

嵌入式常用调试方法

目录 调试工具 日志打印 1. Debug日志打印 2. RTT日志打印 3. 串口日志打印 总结 嵌入式系统的调试是一个复杂且关键的过程&#xff0c;涉及多种工具和技术的综合应用。以下是对嵌入式常见调试工具、日志打印方式的全面报告&#xff0c;包括Debug、RTT&#xff08;Real-T…

植物大战僵尸杂交版2.1版本重磅发布!更新内容介绍讲解

植物大战僵尸杂交版2.1版&#xff0c;简直是游戏迷们的福音&#xff01;这个版本不仅更新了大量的新植物和僵尸角色&#xff0c;还加入了更多的游戏模式和挑战关卡&#xff0c;让玩家们可以更加畅快地玩耍。 植物大战僵尸杂交版V2.1 :苹果安卓 PC防闪退工具修改工具高清工具通关…

ComfyUI 完全入门:Refiner精炼器

在 SDXL基础模型1.0版本发布时&#xff0c;Stability AI 公司同时发布了一个名为SDXL Refiner的模型。这个Refiner模型是专门设计用来对基础模型生成的图像进行进一步优化和细化的&#xff0c;所以大家也经常称之为精炼器或者精修器。 Refiner模型的主要目的是提升图像的质量&…

Linux进程间通信---使用【共享内存+信号量+消息队列】的组合来实现服务器进程与客户进程间的通信

IPC结合实现进程间通信实例 下面将使用【共享内存信号量消息队列】的组合来实现服务器进程与客户进程间的通信。 共享内存用来传递数据&#xff1b;信号量用来同步&#xff1b;消息队列用来 在客户端修改了共享内存后通知服务器读取。 server.c&#xff1a;服务端接收信息 …

【机器学习】新网络环境docker实战:AI智能体平台DIFY部署与升级

目录 一、引言 二、Dify在dockerhub被禁用后&#xff0c;如何部署、升级 2.1 网络及硬件条件 2.2 docker部署、升级方案 三、总结 一、引言 关于dify&#xff0c;之前力推过&#xff0c;大家可以跳转 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify…

Spring Boot整合hibernate-validator实现数据校验

文章目录 概念基本概念常用校验注解 前置内容整合Hibernate Validator快速入门优雅处理参数校验异常其余注解校验自定义校验注解 参考来源 概念 基本概念 Hibernate Validator 是一个参数校验框架&#xff0c;可以非常方便地帮助我们校验应用程序的入参&#xff0c;实现了参数…

App UI 风格展现非凡创意

App UI 风格展现非凡创意

基于 Python 解析 XML 文件并将数据存储到 MongoDB 数据库

1. 问题背景 在软件开发中&#xff0c;我们经常需要处理各种格式的数据。XML 是一种常用的数据交换格式&#xff0c;它可以存储和传输结构化数据。很多网站会提供 XML 格式的数据接口&#xff0c;以便其他系统可以方便地获取数据。 我们有这样一个需求&#xff1a;我们需要从…

Maven认识与学习

1. Maven介绍 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 官网&#xff1a;Maven – Welcome to Apache Maven Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受…

13600KF+3060Ti,虚拟机安装macOS 14,2024年6月

距离上次装macOS虚拟机已经有一段时间了&#xff0c;macOS系统现在大版本升级的速度也是越来越快了&#xff0c;由于Office只支持最新三个版本的macOS&#xff0c;所以现在保底也得安装macOS 12了&#xff0c;我这次是用macOS 14做实验&#xff0c;13和12的安装方式和macOS 14一…

“人事助理转产品经理”历险记

​好久没写就业喜报了 去年太忙&#xff0c;年后了&#xff0c;必须给大家把同学们就业的情况梳理一下分享出来。希望对大家有所帮助。 同学档案 原岗位&#xff1a;HR 地点&#xff1a;西安 工作年限&#xff1a;2年 转岗级别&#xff1a;中级产品经理 转岗工资&#xff1…

【Android】Android系统性学习——Android系统架构

前言 部分内容参考《Android进阶解密》 – 刘望舒 1. Android版本 官方链接&#xff1a;https://developer.android.com/studio/releases/platforms 里面有各个版本的官方文档&#xff0c;有些新功能的用法在这里面。 现在做安卓11&#xff0c;有时候需要向下兼容 2. AOSP …

做了2年前端,盘点前端技术栈!大佬轻喷~

前言 自己写了快两年前端&#xff0c;但是大致总结一下哈哈哈哈我觉得这个话题蛮有意思的&#xff0c;可以看看大家的技术广度&#xff0c;可以进行分享和学习以及讨论所以这里说一下我对我的前端技术&#xff0c;做一下盘点和总结因为我的开发年限有限&#xff0c;所以我觉得…

CSS 字体颜色渐变

CSS 字体颜色渐变 css 代码: 注意&#xff1a;background: linear-gradient&#xff08;属性&#xff09;&#xff0c;属性可以调整方向 例如&#xff1a;to bottom 上下结构&#xff0c;to right 左右结构font-family: DIN, DIN;font-weight: normal;font-size: 22px;color:…

openlayers 绘图功能,编辑多边形,select,snap组件的使用(六)

本篇介绍一下vue3-openlayers的select&#xff0c;snap的使用 1 需求 点击开始绘制按钮开始绘制多边形&#xff0c;可以连续绘制多个多边形点击撤销上步按钮&#xff0c;撤销上一步绘制点绘制多个多边形&#xff08;或编辑多边形时&#xff09;&#xff0c;鼠标靠近之前的已绘…

Vue3【二十二】Vue 路由模式的嵌套路由和用query给组件的RouterLink传参

Vue3【二十二】Vue 路由模式的嵌套路由和用query给组件传参 Vue3【二十二】Vue 路由模式的嵌套路由和用query给组件传参 RouterLink 的两种传参方法 RouterView 案例截图 目录结构 代码 index.ts // 创建一个路由器&#xff0c;并暴漏出去// 第一步&#xff1a;引入createRou…