难度:简单
题目描述:
思路总结:递归,两种思路。自顶向下,分治思想;自底向上,回溯思想。
题解一:(自顶向下)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
if not root:return True
return abs(self.height(root.left) - self.height(root.right)) < 2 and self.isBalanced(root.left) and self.isBalanced(root.right)
def height(self, node):
if not node:return 0
return 1+max(self.height(node.left), self.height(node.right))
题解一结果:
题解二:(自底向上)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
self.res = True
def helper(node):
if not node:return 0 #递归结束条件
left = helper(node.left) + 1
right = helper(node.right) + 1
if abs(left - right) > 1:self.res=False #每次迭代中判断不满足条件。
return max(left, right) #这里是重点,不要忘记。
helper(root)
return self.res
题解二结果: