1. 二叉树基础与算法训练概述
最近在算法训练中集中攻克了四个经典的二叉树问题:翻转二叉树、对称二叉树、最大深度和最小深度。这些题目看似基础,却涵盖了二叉树遍历、递归思维、边界条件处理等核心知识点,是每位程序员夯实算法基础的必经之路。
我在刷题过程中发现,很多初学者容易陷入"看题解恍然大悟,自己写无从下手"的困境。究其原因,往往是对递归的理解不够透彻,或者对遍历过程中的状态维护不够清晰。本文将结合这四道力扣题目(226、101、104、111),分享一套系统性的解题思路和调试技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 226. 翻转二叉树解析
2.1 问题描述与递归解法
翻转二叉树要求我们将每个节点的左右子节点交换位置。这道题最经典的解法是递归:
python复制def invertTree(root):
if not root:
return None
# 交换左右子树
root.left, root.right = root.right, root.left
# 递归处理子树
invertTree(root.left)
invertTree(root.right)
return root
这个解法的时间复杂度是O(n),因为每个节点都会被访问一次。空间复杂度取决于递归栈的深度,最坏情况下(树退化为链表)是O(n)。
注意:交换操作必须在递归调用之前完成,这样才能保证子树的翻转顺序正确。
2.2 迭代解法与层序遍历
除了递归,我们还可以用迭代法实现翻转。使用队列进行层序遍历是一个不错的选择:
python复制from collections import deque
def invertTree(root):
if not root:
return None
queue = deque([root])
while queue:
node = queue.popleft()
node.left, node.right = node.right, node.left
if node.left:
queue.append(node.left)
