98. 验证二叉搜索树
My Solution
利用二叉搜索树的中序遍历一定是有序的解决
class Solution {
List<Integer> list = new ArrayList<>();
public boolean isValidBST(TreeNode root) {
visit(root);
if (list.size() <= 1) {
return true;
}
for (int i = 1; i < list.size(); i++) {
if (list.get(i - 1) >= list.get(i))
return false;
}
return true;
}
public void visit(TreeNode root) {
if (root == null)
return ;
visit(root.left);
list.add(root.val);
visit(root.right);
}
}
递归写法
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean isValidBST(TreeNode root, long lower, long upper) {
if (root == null) {
return true;
}
if (root.val >= upper || root.val <= lower) {
return false;
}
return isValidBST(root.left, lower, root.val) && isValidBST(root.right, root.val, upper);
}
}