import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pRoot TreeNode类
     * @return bool布尔型
     */
    public boolean IsBalanced_Solution (TreeNode pRoot) {
        // write code here
        return getHeight(pRoot) != -1;
    }
    private int getHeight(TreeNode node) {
        if (node == null)return 0;
	  // 对当前节点,递归判断其左右子树是否为平衡二叉树
        int leftCnt = getHeight(node.left);
        if(leftCnt == -1)return -1;
        int rightCnt = getHeight(node.right);
        if(rightCnt == -1)return -1;
	  // 判断左右子树高度差是否小于等于1,是则返回当前节点的高度
        return Math.abs(leftCnt - rightCnt) > 1 ? -1 : Math.max(leftCnt, rightCnt)+1;
    }
}

递归判断,先判断左右子树是否为平衡二叉树