BFS 代码模板

递归写法
**

  1. visited = set()
  2. def dfs(node, visited):
  3. if node in visited: # terminator
  4. # already visited
  5. return
  6. visited.add(node)
  7. # process current node here.
  8. ...
  9. for next_node in node.children():
  10. if next_node not in visited:
  11. dfs(next_node, visited)

非递归写法

  1. def DFS(self, tree):
  2. if tree.root is None:
  3. return []
  4. visited, stack = [], [tree.root]
  5. while stack:
  6. node = stack.pop()
  7. visited.add(node)
  8. process (node)
  9. nodes = generate_related_nodes(node)
  10. stack.push(nodes)
  11. # other processing work
  12. ...

BFS 代码模板

  1. def BFS(graph, start, end):
  2. visited = set()
  3. queue = []
  4. queue.append([start])
  5. while queue:
  6. node = queue.pop()
  7. visited.add(node)
  8. process(node)
  9. nodes = generate_related_nodes(node)
  10. queue.push(nodes)
  11. # other processing work
  12. ...