剑指OFFER-平衡二叉树(Java)

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

示例1

输入
{1,2,3,4,5,6,7}

返回值
true

核心代码实现

//平衡二叉树是一棵空树或它的左右子树的高度差的绝对值不超过1,且左右子树均为平衡二叉树
public class Solution {
    
    
    boolean flag = true;    //flag用于标注该二叉树是否为平衡二叉树
    public boolean IsBalanced_Solution(TreeNode root) {
    
    
        if(root == null){
    
    
            return true;    //空树也是平衡二叉树
        }
        depth(root);    //depth()用于计算二叉树的深度
        return flag;
    }
    
    public int depth(TreeNode root){
    
    
        if(root == null){
    
    
            return 0;
        }
        //判断左子树是否为平衡二叉树
        int leftDepth = depth(root.left);
        if(leftDepth == -1){
    
    
            flag = false;
        }
        //判断右子树是否为平衡二叉树
        int rightDepth = depth(root.right);
        if(rightDepth == -1){
    
    
            flag = false;
        }
        //判断左右子树的高度差的绝对值是否不超过1
        if(Math.abs(leftDepth - rightDepth) > 1){
    
    
            flag = false;
        }
        return 1 + Math.max(leftDepth,rightDepth);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_48440312/article/details/109326227