Leetcode 98.验证二叉搜索树
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
-
节点的左子树
只包含 小于 当前节点的数。
-
节点的右子树只包含 大于 当前节点的数。
-
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3] 输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。
解题思路:
我们使用了一个辅助函数 isValidBST
,它接受一个额外的 min
和 max
参数来表示当前节点的值应该在的范围内。初始调用时,我们将 min
和 max
设置为 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);
}
}
评论区