目 录CONTENT

文章目录

Leetcode 98.验证二叉搜索树

小王同学
2024-03-13 / 0 评论 / 0 点赞 / 38 阅读 / 0 字

Leetcode 98.验证二叉搜索树

力扣传送门(opens new window)

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

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

  • 节点的左子树

    只包含 小于 当前节点的数。

  • 节点的右子树只包含 大于 当前节点的数。

  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

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

示例 2:

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

解题思路:

我们使用了一个辅助函数 isValidBST,它接受一个额外的 minmax 参数来表示当前节点的值应该在的范围内。初始调用时,我们将 minmax 设置为 null,表示没有限制。

在每个节点的递归调用中,我们检查节点值是否超出了允许的范围,如果超出范围则返回 false。然后,我们递归地调用 isValidBST 函数来判断左子树和右子树是否满足二叉搜索树的定义。对于左子树,我们将上限 max 设置为当前节点的值,对于右子树,我们将下限 min 设置为当前节点的值。

这样,我们可以正确地判断整个二叉搜索树是否有效。

代码实现:

class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, null, null);
    }

    private boolean isValidBST(TreeNode node, Integer min, Integer max) {
        if (node == null) {
            return true;
        }

        if ((min != null && node.val <= min) || (max != null && node.val >= max)) {
            return false;
        }

        return isValidBST(node.left, min, node.val) && isValidBST(node.right, node.val, max);
    }
}
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区