剑指offer32

130 阅读1分钟

题目描述

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

解题思路分析

  • 首先我们需要知道什么是平衡二叉树:它是一颗空树,或者它的左右子树高度差的绝对值不超过1
  • 然后我们知道,到了二叉树的题目,特别是这题我们还需要根据其左右子树的高度差来计算,所以,这题一定要用递归,一般情况下树的题目和链表的题目都能使用递归解决,直接上代码吧,很容易看懂的

代码实现

public boolean isBalance(TreeNode root) {
    return getDepth(root) != -1;
}
//这是一个求高度的方法,使用了递归求高度
private int getDepth(TreeNode root) {
    if (root == null) {
        return 0;
    }
    //左子树高度
    int left = getDepth(root.left);
    //如果左子树高度为-1(这是我们定义的,如果该子树中出现了不平衡的节点,直接返回-1,代表不是平衡树了)
    if (left == -1) {
        return -1;
    }
    //右子树高度
    int right = getDepth(root.right);
    //同上面左子树一样
    if (right == -1) {
        return -1;
    }
    //返回该节点的高度,如果该节点不平衡,直接返回-1,如果平衡,则返回其高度,用于上一层嵌套计算其父节点的高度差
    return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
}