当前位置: 首页 > news >正文

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树

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

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

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

image-20231003092513470

由于二叉搜索树的性质:

如果该二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。

这启示我们设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r) 的范围内说明不满足条件直接返回,否则我们要继续递归调用检查它的左右子树是否满足,如果都满足才说明这是一棵二叉搜索树。

那么根据二叉搜索树的性质,在递归调用左子树时,我们需要把上界 upper 改为 root.val,即调用 helper(root.left, lower, root.val),因为左子树里所有节点的值均小于它的根节点的值。同理递归调用右子树时,我们需要把下界 lower 改为 root.val,即调用 helper(root.right, root.val, upper)。

函数递归调用的入口为 helper(root, -inf, +inf), inf 表示一个无穷大的值。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean isValidBST(TreeNode node,long l,long r){if(node == null){return true;}if(node.val <= l || node.val >= r){return false;}return isValidBST(node.left,l,node.val) && isValidBST(node.right,node.val,r);}
}
http://www.lryc.cn/news/182036.html

相关文章:

  • wxpython:wx.grid 表格显示 Excel xlsx文件
  • 事件循环机制
  • 苹果曾考虑基于定位控制AirPods Pro自适应音频
  • 【代码阅读笔记】yolov5 rknn模型部署
  • 【多线程】进程与线程 并发编程 面试题总结
  • C++算法 —— 动态规划(10)二维费用背包
  • MySQL数据库正在耗用大量CPU的问题排查
  • php替换字符串里的a变为b
  • 黑豹程序员-架构师学习路线图-百科:CSS-网页三剑客
  • NUWA论文阅读
  • 4.Tensors For Beginners-Vector Definition
  • vertx学习总结5
  • Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
  • 【网络】网络扫盲篇 ——用简单语言和图解带你入门网络
  • 【项目开发 | C语言项目 | C语言薪资管理系统】
  • Android---GC回收机制与分代回收策略
  • 前缀、中缀、后缀表达式相互转换工具
  • Vue之ElementUI之动态树+数据表格+分页(项目功能)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗
  • 编译和链接
  • 常识判断 --- 科技常识
  • 修改npm全局安装的插件(下载目录指向)
  • <C++> 异常
  • 聊聊HttpClientBuilder
  • MacOS - Sonoma更新了啥
  • C++17中头文件filesystem的使用
  • 「专题速递」数字人直播带货、传统行业数字化升级、远程协作中的低延时视频、地产物业中的通讯终端...
  • PE格式之PE头部
  • SLAM从入门到精通(用python实现机器人运动控制)
  • 接口和抽象类有什么区别?