二叉树:判断当前二叉树是否为平衡树

使用递归完成该题的解析

1. 创建递归函数
  public static Info process(Node node) {
        //递归的出口
        if (node == null) {
            return new Info(true, 0);
        }
//        递归获取左子树的节点
        Info leftInfo = process(node.left);
        //        递归获取右子树的节点
        Info rightInfo = process(node.right);
//        根据左右子节点获取当前节点的深度,有可能左右两边深度不一样取最大值,
//        最后加1
        int height = Math.max(leftInfo.height, rightInfo.height) + 1;
        //是否是平衡树的标记
        boolean isBalanced = true;
        
        if (!leftInfo.isBalanced) {
            isBalanced = false;
        }
        if (!rightInfo.isBalanced) {
            isBalanced = false;
        }
        //判断条件,如果左子树的深度减去右子树深度的值大于1,说明其不是平衡树
        if (Math.abs(leftInfo.height - rightInfo.height) > 1) {
            isBalanced = false;
        }
        return new Info(isBalanced, height);
    }
2. Info对象
    //平衡树的对象
    public static class Info {
        public boolean isBalanced;
        public int height;
        public Info(boolean i, int h) {
            isBalanced = i;
            height = h;
        }
    }
3. 函数入口
    public static boolean isBalanced(Node node) {
        return process(node).isBalanced;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容