DFS 和 BFS

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)

例题

BFS

上一篇:2020.8.19 TOEFL Independent Writing


下一篇:4树 二叉树 二叉搜索树 堆