LeetCode - 98. validate-binary-search-tree

思路

合格的BST:
如果左子树不为空,左子树上的所有节点的值小于根节点。
如果右子树不为空,右子树上的所有节点的值大于根节点。

  1. 加入一个递归方法hepler(root, lower, upper) 方法,来判断root节点的值,是否在(lower,upper)区间内。
  2. 如果是左子树,那么hepler(root.left, lower, root.val),如果root节点的值不满足(lower,root.val)这个区间,返回false;
  3. 如果是右子树,那么hepler(root.right, root.val, upper),如果root节点的值不满足(root.val,upper)这个区间,返回false;

如果左右子树都是true,那么整棵树就是合格的。

代码

    public static boolean isValidBST(TreeNode root) {
        return helper(root, null, null);
    }

    public static boolean helper(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;
        }
        if (!helper(root.left,lower,root.val)){
            return false;
        }
        if (!helper(root.right,root.val, upper)){
            return false;
        }
        return true;
    }

你可能感兴趣的:(算法,二叉树,java)