题目
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
示例1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
分析: 采用DFS的方法,自底向上递归,类似于后序遍历,对于当前遍历到的节点,先递归地判断其左右子树是否平衡,再判断以当前节点为根的子树是否平衡。如果一棵子树是平衡的,则返回其高度(高度一定是非负整数),否则返回 -1。如果存在一棵子树不平衡,则整个二叉树一定不平衡。
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
balance = self.TreeDegree(root)
return balance >= 0
def TreeDegree(self, root):
if root == None:
return 0
left = root.left
right = root.right
left_k = self.TreeDegree(left)
right_k = self.TreeDegree(right)
if abs(left_k - right_k) > 1 or left_k < 0 or right_k < 0:
return -1
else:
return max(left_k, right_k)+1