https://medium.com/@doychinivn/how-to-traverse-a-graph-using-breadth-first-search-and-depth-first-search-c56b2870a5e3