题目:

解析:
这里使用全局变量,简化递归
通过一个全局变量prev,中序遍历二叉树
发现序列有序就更新prev,然后返回true
注意:这里可以直接剪枝写法:发现不是搜索二叉树,直接返回false即可
代码:
class Solution {
public Long pre = -Long.MIN_VALUE;//注意数据本来很小时,开始就不会有序,所以要更大的数据类型
public boolean isValidBST(TreeNode root) {
/**
通过一个全局变量prev,中序遍历二叉树
发现序列有序就更新prev,然后返回true否则返回false
*/
if(root == null) return true;
boolean ret = false;
boolean leftT = isValidBST(root.left);
//剪枝
if(leftT == false) return false;//直接返回
if(pre < root.val){
ret = true;
//剪枝
if(ret == false) return false;
pre = (long)root.val;//prev是root的前驱,方式来遍历
}
boolean rightT = isValidBST(root.right);
return leftT && ret && rightT;
}
}