https://medium.com/@amitai.turkel/introduction-to-bfs-algorithms-traversing-data-structures-43b3573e3d59