思路
合格的BST:
如果左子树不为空,左子树上的所有节点的值小于根节点。
如果右子树不为空,右子树上的所有节点的值大于根节点。
- 加入一个递归方法hepler(root, lower, upper) 方法,来判断root节点的值,是否在(lower,upper)区间内。
- 如果是左子树,那么hepler(root.left, lower, root.val),如果root节点的值不满足(lower,root.val)这个区间,返回false;
- 如果是右子树,那么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;
}