## Traversal introduction Many algorithms that involve graphs must involve some way to traverse the elements of a graph. The two simplest ways of traversal are depth-first search (DFS) and [breadth-first search (BFS)](https://en.wikipedia.org/wiki/Breadth-first_search). The major difference here is the *order* in which nodes are traversed. If we start from vertex 0 in the tree, in what order would you expect depth-first search to traverse the nodes? (There are multiple correct answers!) ``` 0 / \ 1 2 / \ 3 4 ``` Note that a single traversal step checks for already-visited nodes. So, if the path is `0 -> 1 -> 3`, the path cannot become `0 -> 1 -> 3 -> 1`. What about starting from vertex 0 in this graph? ``` 0 --- 1 | | 3 --- 2 ``` What about this one? ``` 0 / \ 1 5 / \ \ 2 3 6 \ / / 4 7 \ / 8 ``` ## Formalizing the algorithm Based on these examples, can we create a formal algorithm that takes a starting node, producing a valid traversal path for all three graphs? An example for this graph: ``` 0 --- 1 | | 3 --- 2 ``` - Arguments: starting node `0` - Expected output: