DFS
想清楚几个关键点:
- 底层支持dfs的数据结构是栈,这个栈可以是系统自动帮我们提供和维护(递归写法),也可以我们自己来模拟(迭代写法)
- 注意任何时候栈里面维护的数据只是一条深度方向的路径,而不是维护整棵树,栈中的数据是动态更新的,代码处理技巧类似bfs给当前层级维护队列的技巧(之前有一次快手面试在这个点上犯迷糊了)
- 注意回溯之后可能需要“恢复现场”
- 注意有些问题可能需要剪枝优化
模板
visited = set()
def dfs(node, visited):
visited.add(node)
#process current node here
...
for next_node in node.children():
if not next_node in visited:
dfs(next_node, visited)