自顶向下,得到每个叶子结点的深度。自底向上检查每个节点包含叶子结点的深度差是否大于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