判定是否是搜索树

判定是否是搜索树

题目:

给定一颗二叉树,判定该二叉树是否是一颗搜索树。

注: 所谓的搜索树就是一棵二叉树的任意子树的左节点的值都要小于根节点的值以及右节点的值都要大于根节点的值。

解题思路:

我们首先定义一个信息类Info这个信息类包括的信息有是否是一颗搜索树以及左子树的最大值以及右子树的最小值,我们递归地处理左子树以及右子树最后根据左右子树地Info信息综合来判断这棵树是否是一颗搜索树。具体代码如下:

代码:

/**
 * 判断一棵树是否是搜索树
 * 搜索树:对于任意一棵二叉树的左节点小于根节点 右节点大于根节点
 */
public class IsBinarySearchTree {
    //1.首先定义一个表示二叉树节点类型的类
    public static class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;

        TreeNode(int val) {
            this.val = val;
        }
    }

    //2.定义一个Info类这个类包含信息有 是否是搜索树 左子树的最大值 以及右子树的最小值
    public static class Info {
        public boolean isBST;
        public int max;
        public int min;

        public Info(boolean is, int ma, int mi) {
            isBST = is;
            max = ma;
            min = mi;
        }
    }

    //3.定义一个方法用来处理是否是搜索树
    public static Info process(TreeNode x) {
        //3.1如果根节点为空那么此树不是一颗搜索树
        if (x == null) {
            return null;
        }
        //3.2使用process函数递归处理左子树以及右子树
        Info leftInfo = process(x.left);
        Info rightInfo = process(x.right);
        //3.3先定义左子树的最大值以及右子树的最大值为x的val
        int max = x.val;
        int min = x.val;
        //3.4如果左子树的信息不为空那么获取左子树的最大值
        if (leftInfo != null) {
            max = Math.max(leftInfo.max, max);
            min = Math.min(leftInfo.min, min);
        }
        //3.5如果右子树的信息不为空那么获取右子树的最小值
        if (rightInfo != null) {
            max = Math.max(rightInfo.max, max);
            min = Math.min(rightInfo.min, min);
        }
        //3.6先定义一个变量是否为搜索树 isBST 设为false
        boolean isBST = false;
        //3.7分别判定左右子树是否为搜索树 如果左右子树为空树那么左右子树默认为搜索树
        boolean leftIsBst = leftInfo == null ? true : leftInfo.isBST;
        boolean rightIsBst = rightInfo == null ? true : rightInfo.isBST;
        //3.8分别判定左子树的最大值是否小于x的值 右子树的最小值是否大于x的值
        boolean leftMaxLessX = leftInfo == null ? true : (leftInfo.max < x.val);
        boolean rightMinMoreX = rightInfo == null ? true : (rightInfo.min > x.val);
        //3.9根据以上得到的信息综合判断整棵树是否是一颗搜索树
        if (leftIsBst && rightIsBst && leftMaxLessX && rightMinMoreX) {
            isBST = true;
        }
        //3.10最后返回最终的Info信息
        return new Info(isBST, max, min);
    }
}
posted @   卬啵哩啵bo  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示