📅  最后修改于: 2023-12-03 15:00:24.628000             🧑  作者: Mango
深度优先搜索(DFS)是一种与树或图的遍历相关的算法。该算法从根节点开始遍历整棵树或图,尽可能深地搜索每个分支,直到不能再继续为止,然后回溯到上一级节点,重复同样的过程,直到遍历完整棵树或图。
在Python中实现DFS的方式,常见的有递归和栈两种方法。
递归实现DFS的代码很简洁,但是在大量数据的时候会导致栈溢出的问题。
def dfs(node):
if not node:
return
print(node.val)
dfs(node.left)
dfs(node.right)
栈实现DFS需要使用一个栈来保存节点,每次从栈中弹出一个节点,然后将其子节点按照一定的顺序压入栈中,直到栈为空。
def dfs(node):
if not node:
return
stack = [node]
while stack:
cur = stack.pop()
print(cur.val)
if cur.right:
stack.append(cur.right)
if cur.left:
stack.append(cur.left)
DFS常用于图和树的遍历。在图中,DFS可以做连通性分析、拓扑排序、最短路径等问题。在树中,DFS可以做树形DP、打印二叉树以及求解树的直径等问题。
DFS是常用的算法之一。在Python中实现该算法有递归和栈两种方式,需要根据实际情况进行选择。在应用场景方面,DFS适用于图和树的遍历等问题。