1. 题目:
给定一个二叉树,判断它是否是
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例 3:
输入:root = []
输出:true
2. 我的代码:
# 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 def height(node): # 终止条件 if node == None: return 0 # 后序遍历 left_height = height(node.left) right_height = height(node.right) if abs(left_height - right_height) > 1 or left_height == -1 or right_height == -1: return -1 return 1 + max(left_height, right_height) if height(root) == -1: return False else: return True
检查是否是平衡二叉树,其实就是统计高度,然后做差,查看各个树的所有节点的高度差是否大于1。如果大于1则说明不是平衡二叉树;如果全部节点都满足高度差小于等于1,则说明是平衡二叉树。
因此,我们只需要把计算最大高度的代码修改一下即可,因为都是在求高度。只不过在求得高度后做差abs(left_height - right_height)
查看是否满足平衡二叉树条件。这里,我们令如果高度差大于1则返回-1,以-1为记号,不断返回(因为只要有一个节点不满足就能确定这个二叉树一定不是平衡二叉树了)。
简便的写法,可以将判断条件合并,再加上 or left_height == -1 or right_height == -1
就可以得知上一个节点是否平衡。其余正常返回树的高度即可,因为还要继续服务于上面的节点判断。