先审好题,要求满足两个条件:
- 左右两个子树的深度差不超过1
- 左右两个子树本身也是平衡二叉树
功能分解:
- 求一个二叉树的深度
- 判断是否为平衡二叉树,包括其左右子树是否也是平衡二叉树
可通过两个递归函数实现
class Solution:
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
# write code here
if not pRoot:
return True
left = self.deep(pRoot.left)
right = self.deep(pRoot.right)
# 满足左右子树的深度差值不超过1
if abs(left - right) > 1:
return False
# 左右子树本身也是平衡的
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
# 求树的高度
def deep(self, root: TreeNode) -> bool:
if not root:
return 0
left = self.deep(root.left)
right = self.deep(root.right)
return left + 1 if left > right else right + 1