【学习笔记】DFS、BFS代码模板及知识点回顾

深度优先搜索

Depth-First-Search
【学习笔记】DFS、BFS代码模板及知识点回顾_第1张图片
搜索-遍历

  • 每个节点都要访问一次
  • 每个节点仅仅访问一次
  • 对于节点的访问顺序不限
    • 深度优先:depth first search
    • 广度优先 :breadth first search
DFS 代码 - 递归写法
visited = set()
def dfs(node, visited):
	if node in visited: # terminator
	# already visited
	return
	visited.add(node)
	# process current node here.
	...
	for next_node in node.children():
	if not next_node in visited:
	dfs(next node, visited)
  • 遍历树
    【学习笔记】DFS、BFS代码模板及知识点回顾_第2张图片

  • 遍历图
    【学习笔记】DFS、BFS代码模板及知识点回顾_第3张图片

DFS 代码 - 递归写法
visited = set()
def dfs(node, visited):
	if node in visited: # terminator
	# already visited
	return
	visited.add(node)
	# process current node here.
	...
	for next_node in node.children():
	if not next_node in visited:
	dfs(next_node, visited)
DFS 代码 - 非递归写法
def DFS(self, tree):
	if tree.root is None:
	return []
	visited, stack = [], [tree.root]
	while stack:
	node = stack.pop()
	visited.add(node)
	process (node)
	nodes = generate_related_nodes(node)
	stack.push(nodes)
	# other processing work
	...

广度优先搜索

Breadth-First-Search
【学习笔记】DFS、BFS代码模板及知识点回顾_第4张图片

  • DFS 和 BFS 遍历顺序的区别
    【学习笔记】DFS、BFS代码模板及知识点回顾_第5张图片
BFS 代码
def BFS(graph, start, end):
	queue = []
	queue.append([start])
	visited.add(start)
	while queue:
	node = queue.pop()
	visited.add(node)
	process(node)
	nodes = generate_related_nodes(node)
	queue.push(nodes)
	# other processing

你可能感兴趣的:(算法和数据结构刷题,笔记,dfs,bfs,数据结构,算法,二叉树)