judgeAVL - juedaiyuer/researchNote GitHub Wiki

#判断二叉树是否为平衡二叉树#

/*
* Task:判断二叉树是否为平衡二叉树
*
* 平衡二叉树的性质:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1
*
* @param head 二叉树的根节点
*
* */
public boolean isBalance(TreeNode head){
    boolean[] res = new boolean[1];
    res[0] = true;
    getHeight(head,1,res);
    return res[0];
}

/*
*  递归方式获取二叉树的高度
* 
*  @param head 二叉树的根节点
*  @param level 二叉树的高度h---记录二叉树的高度,依次递增
*
* */
public int getHeight(TreeNode head,int level,boolean[] res){
    if (head == null){
        return level;
    }

    int lH = getHeight(head.left,level+1,res);
    if (!res[0]) {
        return level;
    }
    int rH = getHeight(head.right,level+1,res);
    if (!res[0]) {
        return level;
    }
    if (Math.abs(lH - rH) > 1) {
        res[0] = false;
    }

    return Math.max(lH,rH);

}