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


京公网安备 11010502036488号