题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
示例1
输入
{1,2,3,4,5,6,7}
返回值
true

解题思路:
在求树高度的基础上,直接按要求进行判断
判断为空,则为平衡二叉树
判断左子树是否是
判断右子树是否是
判断高度差是否满足
都满足则返回树高度

java代码

import java.util.*;
public class Solution {
    //如果以root为根节点的树是平衡二叉树则返回树的高度,否则返回-1;
    public int depth(TreeNode root){
        if(root==null) return 0;//如果是空树,则直接返回0,表示是平衡二叉树
        int ldep=depth(root.left);
        if(ldep==-1) return -1;//如果左子树不是,则直接返回不是
        int rdep=depth(root.right);
        if(rdep==-1) return -1;//如果右子树不是,则直接返回不是
        int sub=Math.abs(ldep-rdep);
        if(sub > 1) return -1;//如果高度差大于1,则直接返回不是
        return Math.max(ldep,rdep)+1;//否则返回树的高度
    }
    public boolean IsBalanced_Solution(TreeNode root) {
        return depth(root) != -1;//直接看返回结果是不是-1;
    }
}