Leetcode 98. 验证二叉搜索树

【中等】力扣算法题解析LeetCode98:验证二叉搜索树 本文介绍了如何判断一棵二叉树是否为有效的二叉搜索树(BST)。有效BST需满足:左子树所有节点值小于当前节点,右子树所有节点值大于当前节点,且左右子树自身也是BST。采用递归上下界检查法,为每个节点维护允许取值的上下界(初始为Long极限值),递归验证节点值是否在区间内。时间复杂度O(n),空间复杂度O(n)。附Java代码实现,通过递归辅助函数检查子树的有效性,确保逻辑严谨。 阅读详情

题目

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

在这里插入图片描述

解答

解法一:中序遍历结果有序

利用二叉搜索树的中序遍历结果有序的特性。

复杂度:O(n) 时间, O(n) 空间。

代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   public boolean isValidBST(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inOrder(root, list);
        for (int i = 1; i < list.size(); i ++) {
            if (list.get(i - 1) >= list.get(i)) {
                return false;
            }
        }
        return true;
    }

    private void inOrder(TreeNode node, List<Integer> list) {
        if (node == null) {
            return;
        }
        
        inOrder(node.left, list);
        list.add(node.val);
        inOrder(node.right, list);
    }
}
结果

在这里插入图片描述

解法二:中序遍历时校验

按照中序的顺序遍历。

并使用一个 pre 来保存当前结点上一个结点的值。

遍历时判断当前结点是否比上一个结点的值大。

复杂度:O(n) 时间,O(1) 空间。

代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    long pre = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if(root == null) return true;
        
        if(isValidBST(root.left)) {
            if(pre < root.val) {
                pre = root.val;
                return isValidBST(root.right);
            }
        }
    
        return false;
    }
}
结果

在这里插入图片描述

leetcode 98 验证二叉搜索树 题目如下 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 ... 阅读详情

相关推荐

SAP成本计划BAPI接口BAPI_COSTACTPLN_POSTPRIMCOST深度解析与实战指南

在SAP ERP系统中,成本计划是财务与控制模块的核心功能,它涉及对企业未来成本支出的预测与规划。其原理是通过结构化数据模型,将成本要素分配到具体的成本对象上,以实现预算编制和成本控制。这一技术的核心价值在于实现成本数据的标准化、自动化处理,从而提升财务流程效率与数据准确性。在应用场景上,成本计划广泛应用于年度预算编制、项目成本预测、系统间数据集成以及历史数据迁移等关键业务环节。本文聚焦于实现上述流程自动化的关键技术——SAP标准接口BAPI_COSTACTPLN_POSTPRIMCOST,并深入探讨其在高

weixin_29657209的博客 349

98. 验证二叉搜索树【 力扣(LeetCode) 】

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

yyh520025的博客 1017

移远EC20模块USB模式切换的底层逻辑与驱动适配探秘

本文深入探讨了移远EC20模块USB模式切换的底层逻辑与驱动适配机制,详细解析了AT命令控制下的USB0与WWAN0模式差异。通过分析USB协议栈、内核驱动框架及网络子系统的交互,提供了模式切换的完整操作流程和常见问题解决方案,助力开发者优化4G通信模块在嵌入式设备中的稳定连接。

cc789的博客 843

验证二叉搜索树-leetcode力扣第98题

验证二叉搜索树-leetcode.98题目地址求解要点源码 题目地址 https://leetcode-cn.com/problems/validate-binary-search-tree/ 求解要点 中序遍历二叉树,判断值是否比前一个值大就可以了。 C语言中,函数变量中赋值&的意思是,这个函数按引用传递参数,就是可以在函数体内修改实参的值,而函数返回到主函数后,实参的值也会随之改变。 ...

Manlok的技术博客 303

Procedural modeling

What is procedural modeling? One content generation option is modeling buildings, plants, clouds, cities, and worlds using an underlying system of rules. 1 Procedural Modeling: Grammars A rule-based generative system loosely organized as: ...

qq_24505417的博客 711

【openwrt-21.02】T750 openwrt 双系统说明及切换方法

高度集成的 T750 平台大幅减少组件数量,为产品设计者提供更小的尺寸和更低的功耗。T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。3. preloader 加载并启动 A 系统,若 A 系统的任一启动阶段加载失败,preloader 将重新加载并启动 A 系统 3 次,若 3 次均失败,则自动切换至 B 系统,加载并启动 B 系统。A/B 系统切换流程如下。

wgl307293845的博客 1412

LeetCode第98题_验证二叉搜索树

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

qq_40263592的博客 2415

基于FPGA的AGC自适应增益控制系统开发

自动增益控制(AGC)是一种在接收信号过程中自动调整放大器增益的技术,以确保输出信号的幅度保持在一个恒定的水平。基于FPGA实现AGC系统具有高性能、低延迟和高度可配置的特点,广泛应用于无线通信、音频处理和雷达等领域。FPGA上的AGC系统提供了一种高效且灵活的方法来处理变化的信号环境。在实际应用中,通过合理的设计和优化,可以显著提高信号处理系统的鲁棒性和可靠性。

走向CTO的路上... 1694

LeetCode 力扣 98. 验证二叉搜索树

题目描述(中等难度) 输入一个树,判断该树是否是合法二分查找树,95题做过生成二分查找树。二分查找树定义如下: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。 解法一 开始的时候以为可以很简单的用递归写出来。想法是,左子树是合法二分查...

wind_liang的博客 969

YOLO26小目标检测实战:STAL标签分配+MuSGD优化,VisDrone数据集漏检率降50%

小目标检测是计算机视觉的经典难题,而VisDrone数据集小目标占比极高:数据集中小目标(像素面积<32×32)占比超过60%,且大量目标仅为几个像素,特征信息极度匮乏;背景复杂且干扰多:无人机航拍场景包含建筑物、树木、人群、车辆等复杂背景,小目标易被背景淹没;尺度变化与遮挡严重:同一目标在不同帧中尺度差异大,且小目标极易被其他目标遮挡;传统模型的固有缺陷标签分配策略(如ATSS、SimOTA)偏向大目标,小目标的正样本分配不足,导致模型对小目标不敏感;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1183

通俗易懂的Harris 角点检测

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达Harris 角点检测 认为特征点具有局部差异性。如何描述“特征点具有局部差异性”:以每一个点为中心,取一个窗口,窗口大小为5*5...

3D视觉工坊 1472

LeetCode 98. 验证二叉搜索树

LeetCode 98. 验证二叉搜索树 题目 难度 中等 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ ...

一起加油 4996

YOLOv11改进策略【SPPF】| 将特征金字塔池化修改为:SPPCSPC,提升模型的特征提取能力和计算效率。

本文记录的是。YOLOv7中的SPPCSPC(Spatial Pyramid Pooling Cross Stage Partial Connections)模块是一种结合了(SPP)和(CSP)的改进结构,本文将其添加到YOLOv11中,

Limiiiing的博客 1819

LeetCode 98验证二叉搜索树 c++

算法思路:递归判断根节点大于左侧子树的最右侧节点(即子树最大值),根节点小于右侧子树的最左侧节点(即最小值) 其中寻找子树的最左最右节点分别写了一个递归函数 int leftMax(TreeNode* root) { int max = root->val; if (root->right) max = leftMax(root->right); re...

qq_27357649的博客 338

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode(力扣)98. 验证二叉搜索树Python

【代码】LeetCode(力扣)98. 验证二叉搜索树Python。

qq_44953660的博客 231

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

力扣98.验证二叉搜索树(java)

难度:中等。

youxmm的博客 677

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode 98.验证二叉搜索树

给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。[1, 10^4]

weixin_50878507的博客 623

LeetCode98.验证二叉搜索树

LeetCode98.验证二叉搜索树

Love Peace 826

98. 验证二叉搜索树 - 力扣(LeetCode)

​ 这道题通过中序遍历的方式,检查二叉树是否为有效的二叉搜索树。如果在遍历过程中发现某个节点的值小于或等于前一个节点的值,则直接返回。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

q1111111da的博客 597

leetcode 98. 验证二叉搜索树

leetcode 98. 验证二叉搜索树 题目详情 题目链接 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6...

qq_33789406的博客 151

LeetCode 98--验证二叉搜索树

题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树 示例 输入: 2 / \ 1 3 输出: true 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释:...

Courage-Hu的专栏 178

98.力扣LeetCode_验证二叉搜索树

本文介绍了验证二叉搜索树的两种方法:递归法和非递归法。 递归法通过中序遍历,利用二叉搜索树严格递增的特性,使用指针记录前驱节点值,依次检查每个节点是否大于前驱值。初始设置前驱值为INT_MIN-1以避免边界问题。 非递归法同样基于中序遍历思想,但使用栈模拟递归过程。先将所有左子节点入栈,再依次弹出检查节点值是否递增,同时处理右子节点。两种方法的时间复杂度均为O(n),空间复杂度递归法为O(h),非递归法为O(n)。

2401_82472941的博客 304

《LeetCode力扣练习》第98题 验证二叉搜索树 Java

《LeetCode力扣练习》第98题 验证二叉搜索树 Java 一、资源 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:root = [2,1,3] 输出:true 示例 2: 输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是

XRT_knives的博客 326

golang力扣leetcode 98. 验证二叉搜索树

98. 验证二叉搜索树98. 验证二叉搜索树题解代码 98. 验证二叉搜索树 98. 验证二叉搜索树 题解 中序遍历,然后遍历一遍slice即可,有一个坑就是value相同也是false 代码 package main func main() { } type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func isValidBST(root *TreeNode) bool { result := make([

清风 488

力扣-98.验证二叉搜索树

小结:首先要明确左右子树都是二叉搜索树,整棵树不一定是二叉搜索树。于是转化思维,根据二叉搜索树中序遍历递增的特性进行验证。

weixin_46878941的博客 254
上一篇: Leetcode 96. 不同的二叉搜索树
下一篇: Leetcode 99. 恢复二叉搜索树
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值