想法:
我们可以由下至上检查这个二叉树。我们可以创建一个list记录每一个节点是否平衡以及它的高度,例如[balanced, height],就这样用递归的方法检查每一个节点。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
def dfs(root):
#如果没有根,证明是平衡,返回True。
if not root: return [True, 0]
#用递归的方法遍历左节点和右节点。
left, right = dfs(root.left), dfs(root.right)
#判断一个根是否平衡:
#1. 判断这个根的左节点和右节点是否都平衡。
#2. 判断左右节点的高度差是否小于等于1.
balanced = (left[0] and right[0]) and abs(left[1] - right[1]) <= 1
#返回一个list,记录根是否平衡以及根的高度。
#根的高度等于根自身(1)加上左右节点的最大高度。
return [balanced, 1 + max(left[1], right[1])]
return dfs(root)[0]