473 字
2 分钟
3月22日刷题笔记

本篇题目#

#102二叉树的层序遍历
Medium
#617合并二叉树
Easy

一、理解递归的核心思想#

不要试图在脑子里追踪每一层调用,只想当前节点该做什么,子树的事交给递归。

IMPORTANT

递归三步法

  1. base case → 空节点返回什么?
  2. 当前层逻辑 → 这个节点做什么?
  3. 组合结果 → 用左右子树的结果拼出当前结果

万能模板:

def solve(root):
if not root: # 1. base case
return ...
do_something(root) # 2. 当前节点逻辑
left = solve(root.left) # 3. 交给递归
right = solve(root.right)
return combine(root, left, right)

二、102. 二叉树的层序遍历(BFS)#

#102二叉树的层序遍历
Medium

核心:用 deque,右边进左边出,每轮用 len(queue) 快照当前层节点数

from collections import deque
def levelOrder(root):
if not root:
return []
result = []
queue = deque([root]) # 初始化:根节点入队
while queue:
level_size = len(queue) # 快照当前层节点数
level = []
for _ in range(level_size): # _ 表示不需要循环变量
node = queue.popleft() # O(1) 头部取出
level.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
result.append(level)
return result
TIP

为什么用 deque 不用 listlist.pop(0) 是 O(n),因为要把后面所有元素往前移;deque.popleft() 是 O(1),专门为队列设计。


三、617. 合并二叉树(递归典型题)#

#617合并二叉树
Easy

思路:只想当前节点,两树都有就值相加,有一个为空就返回另一个

def mergeTrees(root1, root2):
if not root1: return root2 # 一棵为空,返回另一棵
if not root2: return root1
node = TreeNode(root1.val + root2.val) # 当前节点相加
node.left = mergeTrees(root1.left, root2.left) # 交给递归
node.right = mergeTrees(root1.right, root2.right)
return node

四、常见语法速查#

# deque 初始化
queue = deque([root]) # 等价于 deque() + append(root)
queue = deque([1, 2, 3]) # 用列表初始化多个元素
# _ 占位符:只想循环 N 次,不需要循环变量
for _ in range(n):
...
# 判空写法(三种等价,推荐 is None 最精确)
if not root: # 最简洁,常用
if root is None: # 最精确,推荐
if root == None: # 不推荐(可被 __eq__ 覆盖)
3月22日刷题笔记
https://www.yyylegend.com/posts/3月22日刷题笔记/
作者
YYYLEGEND
发布于
2026-03-22
许可协议
CC BY-NC-SA 4.0