判断给出的二叉树是否是一个二叉搜索树(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