Skip to content

DFS

Problem

List node's values in a graph starting from start node using DFS.

Key trick

Great for structure problems: connected components, cycle detection, topological sort.

Trap

Recursion depth on deep graphs; forgetting visited causes infinite loops.

Why is it interesting?

Reachability, backtracking, components.

Python solution

def dfs_recursive(graph, start):
    visited = set()
    res = []

    def go(node):
        visited.add(node)
        res.append(node)
        for nei in graph.get(node, []):
            if nei not in visited:
                go(nei)

    go(start)
    return res


def dfs_iterative(graph, start):
    if not graph:
        return []

    res = []
    visited = {start}
    stack = [start]

    while stack:
        node = stack.pop()

        res.append(node)

        # Reverse neighbors to match the recursive traversal res.
        for nei in reversed(graph.get(node, [])):
            if nei not in visited:
                visited.add(node)
                stack.append(nei)

    return res