First Word

This post talks about how to implement DFS without recursion.

We have studied 2 kinds of DFS in the post DFS, BFS and space efficiency. We will skip “true DFS” here, and only talk about “pseudo-DFS” implementation.

Remember, space usage of psudo-DFS is O(depth x branching factor).

Analysis

A DFS without recursion is basically the same as BFS - but use a stack instead of a queue as the data structure.

More details are discussed in this thread.

Implementation

The following code come from this post.

DFS(source):
  s <- new stack
  visited <- {} //empty set
  s.push(source)
  while (s.empty() == false):
    current <- s.pop()
    if (current is in visited):
        continue
    visited.add(current)
    //do something with current
    for each node v such that (source,v) is an edge:
        s.push(v)