**Depth**–**first search** (DFS) is an algorithm for traversing or searching tree or graph data structures. The algorithm starts at the root node (selecting some arbitrary node as the root node in the case of a graph) and explores as far as possible along each branch before backtracking.

`Pseudocode`

```
procedure DFS(G, v) is
label v as discovered
for all directed edges from v to w that are in G.adjacentEdges(v) do
if vertex w is not labeled as discovered then
recursively call DFS(G, w)
```

Python Implementation

```
class GraphTraversals:
def __init__(self, graph):
self.graph = graph
def __str__(self):
return str(self.graph)
def dfs(self, source):
self.visited = []
self.__dfs__(source)
return self.visited
def __dfs__(self, source):
self.visited.append(source)
if len(self.graph[source]) == 0:
return # base case
for node in self.graph[source]:
if node not in self.visited:
self.__dfs__(node)
graph = {
'A' : ['B','C'],
'B' : ['D', 'E'],
'C' : ['F'],
'D' : [],
'E' : ['F'],
'F' : []
}
g = GraphTraversals(graph)
print(g.dfs('A'))
```