📜  DFS - Python (1)

📅  最后修改于: 2023-12-03 15:00:24.628000             🧑  作者: Mango

DFS - Python

深度优先搜索(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适用于图和树的遍历等问题。