import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {

    int pre = Integer.MIN_VALUE; // 上一个值,默认为最小值

    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        boolean leftFlag = isValidBST(root.left);
        if (!leftFlag) {
            return false;
        }
        // 因为二叉搜索树有个特性,中序遍历的结果是递增的,所以前一个值大于当前值时,则为false。
        if (pre > root.val) {
            return false;
        }
        pre = root.val; // 更新pre
        return isValidBST(root.right); // 右子树也要满足此规律
    }
}