hot100-41验证二叉搜索树

一、题目

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

二、思路

1、函数的作用判断该二叉树是否是二叉搜索树。二叉搜索树的左子树所有节点的值必须严格小于它,右子树中所有节点的值必须严格大于它。(是整个左/右子树,不仅仅是左右子节点)。

所以,需要每个节点都有一个合法区间,根节点的合法区间是 (-∞, +∞),左子节点的合法区间是 (-∞, root.val),右子节点的合法区间是 (root.val, +∞)。

每往下一层,合法区间就会被进一步限制,递归时必须传递上下界(min和max),isValidBST

(TreeNode root) 只接受一个参数(根节点),所以需要写一个辅助函数,传递min和max信息。

2、二叉搜索树特点

1)每个节点都有一个数据域,且所有节点的数据域互不相同。

2)左子树的所有节点的值都小于根节点的值。

3)右子树的所有节点的值都大于根节点的值。

4)左子树和右子树也分别为二叉搜索树。

5)中序遍历为升序数组。

三、代码

java 复制代码
class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }
    public boolean isValidBST(TreeNode root,long min,long max){
        if(root == null) return true;
        if(root.val <= min || root.val >= max) return false;
        return isValidBST(root.left,min,root.val) && isValidBST(root.right,root.val,max);
    }
}
相关推荐
LYFlied19 小时前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
唐装鼠19 小时前
rust自动调用Deref(deepseek)
开发语言·算法·rust
ytttr87320 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
jianfeng_zhu1 天前
整数数组匹配
数据结构·c++·算法
smj2302_796826521 天前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode
LYFlied1 天前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
唯唯qwe-1 天前
Day23:动态规划 | 爬楼梯,不同路径,拆分
算法·leetcode·动态规划
做科研的周师兄1 天前
中国土壤有机质数据集
人工智能·算法·机器学习·分类·数据挖掘
来深圳1 天前
leetcode 739. 每日温度
java·算法·leetcode
yaoh.wang1 天前
力扣(LeetCode) 104: 二叉树的最大深度 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽