# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 
# @param root TreeNode类 
# @return bool布尔型
#
class Solution:
    def isBalanced(self , root ):
        # write code here
        #判空,空则是平衡二叉树
        if not root :
                return True
        def maxHeight(r):
            #向下遍历到空结点,其高度为0
            if not r :
                return 0
            #计算左右子树的高度
            l_height = maxHeight(r.left)
            r_height = maxHeight(r.right)
            #如果结点的左右子树存在不平衡的子结点,则其直接返回-1
            if l_height == -1 or r_height == -1:
                return -1
            #子树都是平衡的,则计算该结点高度
            height = max(l_height,r_height)+1
            #判断该结点是否平衡,否则将高度置为-1
            if abs(l_height-r_height) > 1 :
                height = -1
            return height
        h = maxHeight(root)
        if h > 0:
            return True
        return False