Leetcode 98. 验证二叉搜索树

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

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

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

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

输入:
2
/
1 3
输出: true
示例 2:

输入:
5
/
1 4
/
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。

tips:递归法,记录左右子树中的最大值和最小值

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        int max = 0,min=0;
        return recursiveIsVaildBST(root,max,min);
    }
    bool recursiveIsVaildBST(TreeNode* root,int & maxVal,int & minVal) {
        if(root==NULL) {
            return true;
        }
        if(root->left==NULL && root->right==NULL) {
            maxVal=root->val;
            minVal=root->val;
            return true;
        }
        int minL=INT32_MAX,minR=INT32_MAX,maxL=INT32_MIN,maxR=INT32_MIN;
        bool res=true;
        if(root->left!=NULL) {
            res=res&&recursiveIsVaildBST(root->left,maxL,minL);
            if(maxL>=root->val) {
                return false;
            }
        }
        if(root->right!=NULL) {
            res=res&&recursiveIsVaildBST(root->right,maxR,minR);
            if(minR<root->val) {
                return false;
            }
        }
        maxVal=max(maxR,root->val);
        minVal=min(minL,root->val);
        if(!res) {
            return false;
        }
        return true;
    }
};

精简版本:

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return fun(root,LONG_MIN,LONG_MAX);
    }
    bool fun(TreeNode* root, long low, long high) {
        if (root == NULL) return true;
        long num = root->val;
        if (num <= low || num >= high) return false;
        return fun(root->left, low, num) && fun(root->right, num, high);
    }
};
leetcode 98 验证二叉搜索树 题目如下 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 ... 阅读详情

相关推荐

RK3588+TRL8367s 四网口千兆交换机配置与优化实战

本文详细介绍了基于RK3588高性能SoC与TRL8367s千兆交换芯片构建四网口交换机的完整实战流程。内容涵盖硬件连接、设备树配置、内核驱动加载、性能优化及常见问题排查,重点解析了RGMII时序调试、DSA架构配置等关键步骤,为嵌入式网络设备开发提供实用指南。

weixin_29266647的博客 672

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

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

yyh520025的博客 1017

如何构建高质量的 QA 问答知识库

NLP 技术落地最普遍的场景就是智能客服,如阿里的”小蜜“,京东的“JIMI”等等。NLP 技术也广泛应用于搜索系统。无论是“智能客服”,还是“搜索系统”,构建的前提是拥有“高质量的QA知识库”。今天聊聊“如何构建高质量QA知识库。”。 历史对话数据分布分析 基于公司现有系统积累的大规模对话文本数据,需要对文本数据进行归类处理,分析每个部分数据的占比,挖掘出有价值的文本通过 NLP 相关技术进行商业价值转化。下文以医疗领域来举例说明,通过输入对象,可以将文本分为客服输入和用户输入两部分。挖掘相关问题,主要从

Jiassheng的博客 2151

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

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

Manlok的技术博客 303

信息安全与技术——(十一)恶意代码检测与防范技术

恶意代码(Malicious Code )或恶意软件(Malware )主要是指以危害信息的安全等不良意图为目的的程序,它们一般潜伏在受害计算机系统中实施破坏或窃取信息。

m0_63853448的博客 5991

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

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

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

qq_40263592的博客 2415

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 273

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

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

wind_liang的博客 969

gps matlab 书,《GPS基本原理及其Matlab仿真》杨俊.pdf

本书讲述了全球定位系统(GPS)的基本原理和概念,具体包括:GPS测量原理、GPS的结构和发展历史;GPS伪距定位和载波相位定位的原理;GPS中使用的坐标系和时间系统;C/A码的实现原理及载波调制过程;GPS信号捕获和跟踪原理及实现;便携式GPS系统的设计与实现及常用芯片资料等。此外,本书还讲了利用Matlab仿真GPS中涉及到的各种算法和原理,并且给出了所有仿真源程序和仿真框图。利用Matlab...

weixin_33603105的博客 1172

ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

如果今天真的面对那份执行 14 个小时的生产报表,我不会马上把原来的 Loop 改成 50 个aRFC。我会先用 SAT、ST12、SQL Monitor 和 HANA 侧工具确认时间到底花在哪里。如果 90% 时间其实消耗在一条低效 SQL 上,Parallel Processing 只是让 50 个 Worker 同时执行那条低效 SQL,数据库会比原来更痛苦。应该先把串行逻辑本身优化到合理水平。该做 Set-based Processing 的地方先交给 HANA。该避免SELECT。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 149

LeetCode 98. 验证二叉搜索树

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

一起加油 4996

微信小程序码 createWxaCodeUnlimit 生成总是报错 41030 的解决方案

41030错误本质上就是路径不合法。路径多写了一个斜杠路径带了参数小程序版本未发布或 app.json 配置不一致。如果确认页面存在,可以通过来跳过检查。微信小程序 getUnlimitedQRCode 官方文档路径前不能加 /,参数放 scene,发布版本要有这个页面,不行就关掉 check_path。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 474

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

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

qq_27357649的博客 338

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

qq_44953660的博客 231

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

难度:中等。

youxmm的博客 677

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode 98.验证二叉搜索树

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

weixin_50878507的博客 623

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

LeetCode98.验证二叉搜索树

LeetCode98.验证二叉搜索树

Love Peace 826

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

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

2401_82472941的博客 304

[LeetCode] 98、验证二叉搜索树

题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 解题思路 二叉搜索树是递归定义的,所以也可以递归验证。(cf:《剑指offer》第55题,验证平衡二叉树,书上的“后序遍历”验证法代码不好,参考博客) 这个题不要以为简单:乍一看,...

aift的专栏 292

《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
上一篇: Leetcode 36. 有效的数独
下一篇: Leetcode 6. Z 字形变换
wenkun97
博客等级 码龄10年 15粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值