LeetCode Hot 100 No.98 验证二叉搜索树

本文详细介绍了如何通过递归方法判断一个给定的二叉树是否为有效的二叉搜索树,涉及节点值的范围检查和子树递归验证。核心步骤包括检查根节点范围、左右子树的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

在这里插入图片描述

判断二叉搜索树的流程
如示例2所示:

我们可以引出一颗二叉树是否为二叉搜索树的判断过程:
二叉搜索树其左子树都要小于根节点,右子树都要大于根节点。
当这颗二叉搜索树为子树的时候,这棵树还需要在一个特定范围内 min , max,这个范围是其父节点确定的
0.递归的终止条件是如果根节点为null,那直接返回true。
1.判断根节点在不在既定范围min,max内(对于总根节点,其实它是没有范围限制的,但我们也为它规定一个范围,范围为Long类型能达到的最小值和最大值),如果其小于min或大于max, 根节点都不在范围内,则这棵树就不是二叉搜索树。返回false。反之则继续判断其左右子树是不是在合理范围内。
2.判断左子树是不是在(min,root.val)内,如果不是则这棵树也不是二叉搜索树(递归)
3.判断右子树是不是在(root.val,max) 内。如果不是则这棵树也不是二叉搜索树(递归)


class Solution {
    public boolean isval(TreeNode root, long min, long max)//整棵树的取值范围为(min,max),判断其是否在该范围内
    {
        if(root==null)
            return true;
        if(root.val<=min||root.val>=max)//判断根节点在不在传入的范围内
            return false;
        boolean isleftval = isval(root.left, min, root.val);//左子树必须小于根节点,则左子树的范围为(min,root.val)
        boolean isrightval = isval(root.right, root.val, max);//右子树必须大于根节点,则左子树的范围为(root.val,max)
        if(isleftval==true&&isrightval==true)//当左子树,右子树,根节点都在正确的范围内时,该树为一个二叉搜索树
            return true;
        else
            return false;
        
    }
    
    public boolean isValidBST(TreeNode root) {
        return isval(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值