判断给出的二叉树是否是一个二叉搜索树(BST)
二叉搜索树的定义如下
一个节点的左子树上节点的值都小于自身的节点值
一个节点的右子树上节点的值都小于自身的节点值
所有节点的左右子树都必须是二叉搜索树

我在之前的专栏中也写过,树的题目解决思路基本上等于:递归求解+使用栈数据结构+使用队列数据结构。
优先考虑递归求解,因为递归写的方法阅读起来比较容易理解。
这道题目也可以用递归,只不过一般的递归,函数返回值只有一个,那就是题目当前要求的结果,比如这道题目返回的是「是否是二叉搜索树」,但是其上层递归,仅靠这一个结果是无法决定递归结果。因为我们为了求解树是否为二叉搜索树,不仅要知道其子树是否是二叉搜索树,还要知道子树中的最大值和最小值。因此我们需要定义出一个复合结构的递归求解结果。

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    class ResultData{
        public boolean isValid;
        public int min;
        public int max;
        public ResultData(){
            this.isValid = true;
            min = Integer.MAX_VALUE;
            max = Integer.MIN_VALUE;
        }
    }

    public ResultData help(TreeNode root){
        ResultData result = new ResultData();
        if(root == null)return result;//空子树
        if(root.left == null