# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pRoot TreeNode类 
# @return bool布尔型
class Solution:
    def IsBalanced_Solution(self, pRoot: TreeNode) -> bool:
        # 使用一个辅助函数来递归判断是否平衡
        def is_balanced_and_depth(root):
            if root is None:
                return True, 0
            
            # 获取左子树的平衡状态和深度
            left_balanced, left_depth = is_balanced_and_depth(root.left)
            if not left_balanced:
                return False, 0
            
            # 获取右子树的平衡状态和深度
            right_balanced, right_depth = is_balanced_and_depth(root.right)
            if not right_balanced:
                return False, 0
            
            # 当前节点的平衡状态取决于左右子树的平衡状态以及它们的深度差
            balanced = abs(left_depth - right_depth) <= 1
            depth = max(left_depth, right_depth) + 1
            
            return balanced, depth
        
        # 只返回是否平衡的结果
        balanced, _ = is_balanced_and_depth(pRoot)
        return balanced