判断二叉树是否是平衡二叉树


public class Test23 {
    //判断二叉树是否是平衡二叉树
    public class Node2{
        //树的结构
        //这个数要保存的数据类型
        private int value;
        //这个树的左孩子
        private Node2 left;
        //这个树的右孩子
        private Node2 right;

        //构造器(用来初始化这个数)
        public Node2(int data){
            this.value=data;
        }

    }
    //定义一种数据类型用来保存  递归时要返回的重要信息
    public static class ReturnType{
        //成员变量
        //1.用来保存当前这个数是否平衡
        private boolean isBalanced;
        //2.用来保存当前这个树的高度
        private int height;

        //构造器(用来初始化成员变量)
        public ReturnType(boolean isBalanced,int height){
            this.height=height;
            this.isBalanced=isBalanced;
        }
    }

    //递归函数
    public static ReturnType process(Node2 root) {
        //这是递归的出口 到最末尾了,应该往上返回了
        if(root==null){
            return new ReturnType(true,0);
        }

        //去root的左孩子 调用 process方法
        ReturnType left=process(root.left);

        //去root的右孩子 调用 process 方法
        ReturnType right=process(root.right);

        //求当前层 树的高度
        //策略 左孩子和右孩子中较高的 +1
        //int height= left.height> right.height? left.height+1 : right.height+1 ;

        //不是有二个数求最值的方法吗
        int height=Math.max(left.height, right.height)+1;

        //求当前层树是否 是平衡二叉树
        //策略  判断左孩子和右孩子 是否 都是平衡 ,如果是 则是平衡二叉树 否则不是
        //并且 左孩子 和 右孩子的 高度差 不超过1
        boolean isBalance=left.isBalanced&&right.isBalanced&&Math.abs(left.height- right.height)<2;

        //小结: 求当前层 树的高度 和 是否是平衡二叉树 就是在收集 信息
        //把收集的信息 返回 到上一层
        return new ReturnType(isBalance,height);
    }


    public boolean isBalance(Node2 head){
        return process(head).isBalanced;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值