LeetCode 98 验证二叉搜索树Java

295 阅读1分钟
给定一个二叉树,判断其是否是一个有效的二叉搜索树。

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

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

输入:
    2
   / \
  1   3
输出: true
class Solution {
    public boolean isValidBST(TreeNode root) {
        //设计一个递归函数判断
        return isValidBSTHelp(root,null,null);
    }
    //lower是遍历时的下限,upper是上限
    public boolean isValidBSTHelp(TreeNode root,Integer lower,Integer upper){
        if(root == null) return true;
        if(lower!=null && root.val <= lower) return false;
        if(upper!=null && root.val>= upper) return false;
        //递归左子树,如果该二叉树的左子树不为空,则左子树中节点的所有值均小于它的根节点的值,此时的上限是root的值
        if(!isValidBSTHelp(root.left,lower,root.val)) return false;
        //递归右子树,如果该二叉树的右子树不为空,则右子树中节点的所有值均小于它的根节点的值,此时的下限是root的值
        if(!isValidBSTHelp(root.right,root.val,upper)) return false;
        return true; 
    }
}

image.png