[算法练习-剑指offer]题39.平衡二叉树(Java)

题目

题号:39
题目名:平衡二叉树

编程语言

Java

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

初次思路

首先了解平衡二叉树的概念:树上任意一个结点的左右子树都是平衡二叉树,左右子树深度差不超过1

可以借助求最大深度的方法进一步进行递归

如果这个树是平衡树,那么说明这个随机一个结点的左右子树深度差不超过1并且他的左右子树都应该是平衡树

解题代码

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        /**
         * 首先.平衡二叉树的概念就是一个树的子树高度差不超过1
         * 要看左右边子树是不是平衡
         */
        if(root == null) return true;
        int depthDiff = depth(root.left)-depth(root.right);//左右子树的深度差
        return depthDiff>=-1&&depthDiff<=1&&IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);//改结点的深度差小于等于1并且结点左右子树都是平衡树才返回true
    }
    //计算最大深度方法
    private int depth(TreeNode root) {
        if(root ==null) return 0;
        return Math.max(depth(root.left),depth(root.right))+1;
    }
}

算法练习代码我都开源在码云上,有需要的朋友可以看看

https://gitee.com/xiaoxiaoyuworkspace/offeralgorithm

猜你喜欢

转载自blog.csdn.net/qq_41522089/article/details/107754259