98. 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

 

递归方式:

是否是搜索二叉树
一、 列可能性:
条件1:左子树是搜索树
条件2:右子树整体是搜索二叉树
条件3:左子树的最大值小于x.value,右子树的最小值大于x.value
二、向左右子树要信息(并集)
是否是搜索二叉树,最大值和最小值
递归对所有节点是一视同仁,所以递归的方法也要返回这个信息

 

class Solution {
    public boolean isValidBST(TreeNode root) {
        Info info=process(root);
        return info.isBST;
    }

          public  Info process(TreeNode x){
        if(x==null){
            return null;
        }
        Info leftData=process(x.left);
        Info rightData=process(x.right);
        int min=x.val;
        int max=x.val;
        if(leftData!=null){
            min=Math.min(min,leftData.min);
            max=Math.max(max,leftData.max);
        }
        if(rightData!=null){
            min=Math.min(min,rightData.min);
            max=Math.max(max, rightData.max);
        }
        boolean isBST=false;
        boolean leftFlag = leftData == null || leftData.isBST && leftData.max < x.val;
        boolean rightFlag= rightData == null || rightData.isBST && rightData.min > x.val;
        if( leftFlag && rightFlag){
            isBST=true;
        }
        return new Info(isBST,max,min);

    }

    public class Info{
        public boolean isBST;
        public int max;
        public int min;
        public Info(boolean isBST,int max,int min){
            this.isBST=isBST;
            this.max=max;
            this.min=min;
        }
    }
}

  

posted @ 2021-09-02 17:00  sherry001  阅读(98)  评论(0编辑  收藏  举报