1、深度搜索,自顶向下
遍历节点时都判断是否满足平衡的条件
# 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: TreeNode) -> bool:
def dep(node:TreeNode):
if not node:
return 0
else:
l = dep(node.left)
r = dep(node.right)
return max(l,r)+1
if not root:
return True
# 先判断左右节点的高度差是否大于1,再继续下一个节点的判断
return abs(dep(root.left) - dep(root.right)) <=1 and self.isBalanced(root.left) and self.isBalanced(root.right)
2、自底向上
先遍历节点到底部,再判断每个节点是否平衡,之前若不平衡直接返回-1
# 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: TreeNode) -> bool:
# 先递归到底
def dep(node:TreeNode):
if not node:
return 0
l = dep(node.left)
r = dep(node.right)
# 如果不平衡则返回-1
if l==-1 or r==-1 or abs(l-r) >1:
return -1
# 否则返回高度
else:
return max(l,r)+1
if not root:
return True
return dep(root) >=0