Go down as far as you can go then backtrack back to o down a separate path.
Visit the root node, add to visited
Put the node on the stack and visit the next child node, add to visited
Put the first child in stack and visit the next child, add to visited
Repeat until no more children that are not visited
Backtrack by popping nodes of the stack until unvisited node is found
Perform steps 1-3 on the unvisited node and branches
Continue till all nodes visited. or the stack is empty.
def dfs(graph, currentVertex, visited):
visitedNodes.append(currentVertex)
for vertex in graph[currentVertex]
if vertex not in visited::
dfs(graph, vertex, visited)
return visited
Job-scheduling, where some jobs have to completed before others can begin
Finding a path between two vertices
Solving puzzles such as navigating a maze
all nodes adjacent to the current node are visited before moving on.
Visit the root node
Add child nodes to a queue
visit the nodes in the queue in order
add the children of each visited node to the end of the queue
Repeat until queue empty
Finding the shortest path
A web crawler
Facebook uses a breadth-first search to find all the friends of a given individual
In a graph of n nodes and e edges the time complexity is O(n+e) therefore O(n)
in a graph with a max number of edges there are n edges and n^2 edges vn^2 + n therefore the time complexity is O(n^2)
Trees are graphs with no cycles, therefore both types of traversal will visit the nodes in the same order
starting on the left go down as far as possible then record the nodes going upwards, at a branch go down as far as possible before continuing to record.
Visit all the nodes to the left of the root node
visit right
Visit root node
Repeat three points for each node visited
50, 45, 76, 20, 48, 60, 98, 5, 31, 88, 92