1. 平衡二叉树(110题)深度解析
1.1 问题定义与核心思路
平衡二叉树是指任意节点的左右子树高度差不超过1的二叉树。判断一棵树是否为平衡二叉树,关键在于准确计算每个节点的左右子树高度差。这里采用后序遍历(左右中)的递归方法,原因有三:
- 需要先知道左右子树的高度才能计算当前节点的高度差
- 后序遍历天然符合"从下往上"计算高度的需求
- 可以在计算高度的同时完成平衡性判断,避免重复计算
1.2 代码实现详解
python复制class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
return self.get_height(root) != -1
def get_height(self, node):
if not node:
return 0
left = self.get_height(node.left)
right = self.get_height(node.right)
if left == -1 or right == -1 or abs(left - right) > 1:
return -1
return max(left, right) + 1
关键点解析:
get_height函数不仅计算高度,还负责平衡性判断- 使用-1作为不平衡的标志,避免额外变量
- 递归终止条件:空节点高度为0
- 每次递归返回当前子树的最大高度+1
1.3 时间复杂度与优化
最优时间复杂度O(n):每个节点只访问一次。相比暴力解法(对每个节点分别计算左右子树高度)的O(n^2)有显著提升。
注意:在实际面试中,面试官可能会追问为什么选择后序遍历而非前序。可以这样回答:"前序遍历是自上而下计算深度,而后序遍历是自下而上计算高度。判断平衡需要知道子树的高度信息,所以后序更合适。"
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
