Skip to content

Instantly share code, notes, and snippets.

@vishr
Created December 4, 2011 06:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vishr/1429463 to your computer and use it in GitHub Desktop.
Save vishr/1429463 to your computer and use it in GitHub Desktop.
Tree Traversal - Depth First Search
from collections import defaultdict
def recursive_dfs(tree, node, path=[]):
"""
Recursive depth first search
"""
path.append(node)
for child in tree[node]:
path = recursive_dfs(tree, child, path)
return path
def iterative_dfs(tree, node, path=[]):
"""
Iterative depth first search
"""
queue = [node]
while queue:
n = queue.pop(0)
path.append(n)
queue = tree[n] + queue
return path
# -------------------- #
# 1 #
# / | \ #
# 2 7 8 #
# / \ | \ #
# 3 6 9 12 #
# / \ | \ #
# 4 5 10 11 #
# -------------------- #
tree = defaultdict(list, {
1: [2, 7, 8],
2: [3, 6],
3: [4, 5],
8: [9, 12],
9: [10, 11]
})
print "recursive_dfs:", recursive_dfs(tree, 1)
# recursive_dfs: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
print "iterative_dfs:", iterative_dfs(tree, 1)
# iterative_dfs: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment