验证二叉搜索树 - LeetCode 热题 43

大家好!我是曾续缘😘

今天是《LeetCode 热题 100》系列

发车第 43 天

二叉树第 8 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

验证二叉搜索树

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

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

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

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

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

提示:

  • 树中节点数目范围在[1, 104]
  • -231 <= Node.val <= 231 - 1
难度:💖💖

解题方法

这道问题涉及验证给定二叉树是否为有效的二叉搜索树,满足左子节点值小于当前节点值,右子节点值大于当前节点值,并且左右子树也为二叉搜索树。

我们希望通过递归方式判断每个节点是否符合二叉搜索树的条件。

如何判断每个节点是否满足二叉搜索树的条件?

我们采用范围排除法,起始范围设定为(Long.MIN_VALUE, Long.MAX_VALUE),表示第一个节点取值无限制。在遍历二叉树时,维护节点值允许范围的区间(最小值和最大值),逐步缩小范围以确保节点值在合理范围内。

具体而言,对于每个节点,需验证其值是否在允许范围内。若节点值小于最小值或大于最大值,则不符合二叉搜索树条件,返回false;否则,继续递归验证左右子节点。

针对左子节点,其值应小于当前节点值,故更新最大值为当前节点值,继续验证左子树。右子节点值应大于当前节点值,更新最小值为当前节点值,继续验证右子树。

通过不断缩小范围并递归验证,可确保每个节点符合二叉搜索树条件。当达到叶子节点时,返回true,因为空节点符合二叉搜索树条件。

Code

/**
 * 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 root, long mn, long mx){
        if(root == null){
            return true;
        }
        if(root.val <= mn || root.val >= mx){
            return false;
        }
        return isValidBST(root.left, mn, root.val) && isValidBST(root.right, root.val, mx);
    }
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 10:10:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 10:10:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 10:10:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 10:10:03       18 阅读

热门阅读

  1. SpringBoot集成JPA及基本使用

    2024-04-25 10:10:03       17 阅读
  2. 直接扩频通信系统的Matlab实现

    2024-04-25 10:10:03       14 阅读
  3. pandas数据分析综合练习50题 - 地区房价分析

    2024-04-25 10:10:03       50 阅读
  4. NLP(7)--Embedding、池化、丢弃层

    2024-04-25 10:10:03       23 阅读
  5. 检查现有的remote repo 并换新的remote repo

    2024-04-25 10:10:03       31 阅读
  6. npm详解:Node.js的包管理器

    2024-04-25 10:10:03       17 阅读
  7. Linux 解压报错

    2024-04-25 10:10:03       12 阅读