
按题意检查即可
可以递归,会比较好理解,逐渐收缩max和min
class Solution {
public boolean isValidBST(TreeNode root) {
return helper(root, Long.MAX_VALUE, Long.MIN_VALUE);
}
private boolean helper(TreeNode root , long max, long min){
if(root == null)
return true;
if(root.val >= max || root.val <= min)
return false;
return helper(root.left, root.val, min) && helper(root.right, max, root.val);
}
}
也可以迭代,利用中序遍历
class Solution {
public boolean isValidBST(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
if(root == null)
return true;
TreeNode pre = null;
while(root != null || !stack.isEmpty()){
while(root!= null){
stack.push(root);
root = root.left;
}
root = stack.pop();
if(pre != null && root.val <= pre.val)
return false;
pre = root;
root = root.right;
}
return true;
}
}