题目定位
题目要求按层输出,而 BFS 天然就是按层展开,因此队列顺序和答案形状完全一致。
关键观察
队列中的一层就对应答案中的一层,所以处理当前层前要先固定这一层的节点数。
目标复杂度
O(n) / O(w)
这题的解法思路怎么拆
1
题目要求按层输出,而 BFS 天然就是按层展开,因此队列顺序和答案形状完全一致。
2
队列中的一层就对应答案中的一层,所以处理当前层前要先固定这一层的节点数。
3
先识别图模型,并定义邻居如何生成。
4
无权最短路优先 BFS,结构搜索优先 DFS。
参考实现
Python# Generic pattern template
from collections import deque
def bfs(start):
queue = deque([start])
visited = {start}
while queue:
node = queue.popleft()
for nxt in graph[node]:
if nxt not in visited:
visited.add(nxt)
queue.append(nxt)
def dfs(node):
visited.add(node)
for nxt in graph[node]:
if nxt not in visited:
dfs(nxt)
常见坑点
warning
没有先固定当前层大小就直接继续入队孩子。
warning
把下一层节点混进了当前层答案。
高频追问
如果题目改成锯齿层序,怎么变?
能用 DFS 写出等价结果吗?
继续刷相关题
先把 BFS / DFS 这个模式刷成体系,再去做更难变体。