自顶向下,得到每个叶子结点的深度。自底向上检查每个节点包含叶子结点的深度差是否大于1
class Solution:
    def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
        if not pRoot:
            return True
        def dfs(root, depth):                  # 递归,返回每个节点子树的深度——相比于根节点
            if not root:
                return depth-1                 # 遇到None,该子树深度与节点深度一致
            ldepth = dfs(root.left, depth+1)
            rdepth = dfs(root.right, depth+1)
            if abs(ldepth-rdepth)>1:           # 左右子树深度差,大于1,不平衡,引发异常跳出递归
                raise
            else:
                return max(ldepth,rdepth)      # 返回左右子树深度较大者的深度
        try:
            dfs(pRoot, 1)
            return True
        except:
            return False