我们知道二叉搜索树是有序的树,可以把二叉搜索树就当作一个数组,中序遍历二叉搜索树其实就是从小到大遍历数组,那么就可以用一个数组记录二叉搜索树里面的值,如果数组是递增的,就说明这个树就是二叉搜索树。
代码如下:
class Solution {
public boolean isValidBST(TreeNode root) {
List<Integer> res=new ArrayList<>();
traversal(root,res);
for (int i=0;i<res.size()-1;i++){
if (res.get(i)>=res.get(i+1))
return false;
}
return true;
}
public void traversal(TreeNode root,List<Integer> res){
//中序遍历
if (root==null) return;
if (root.left!=null) traversal(root.left,res);
res.add(root.val);
if (root.right!=null) traversal(root.right,res);
}
}
但是我们要的只是判断这个数组是不是递增的,不需要记录整个数组,只用记住前一个节点就好了,这样的话就可以简化代码:
class Solution {
TreeNode pre=null;
public boolean isValidBST(TreeNode root) {
if (root==null) return true;
boolean left=isValidBST(root.left);
if (pre!=null && pre.val>=root.val) return false;
pre=root;
boolean right=isValidBST(root.right);
return left&&right;
}
}