题目地址https://leetcode-cn.com/problems/balanced-binary-tree/
讲解地址https://leetcode-cn.com/problems/balanced-binary-tree/solution/ping-heng-er-cha-shu-by-leetcode-solution/
# 方法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:
if not root:
return True
def depth(root):
if not root:return 0
return max(depth(root.left),depth(root.right))+1
left = depth(root.left)
right = depth(root.right)
if (left - right < -1) or (left - right > 1):
return False
return self.isBalanced(root.left) and self.isBalanced(root.right)
# 方法2 类似于后序遍历
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def height(root):
if not root:# 空节点时的退出条件
return 0
left = height(root.left)# 一直递归到底层,先求左边第一个叶子节点的高度,然后求这个叶子节点右遍节点的高度。
# 属于自下而上的递归方式
right = height(root.right)
if left == -1 or right == -1 or abs(left-right)>1:
return -1
else:
return max(left,right)+1
return height(root)