title: Python Implement Breadth-First Search
body: <p>I found an example online, however, returning only the sequence of the BFS elements is not enough for calculation. Let's say the root is the first level of the BFS tree, then its children are second level, etc. How can I know which level are they in, and who is the parent of each node from the code below (I will create an object to store its parent and tree level)?</p>
  
  <pre><code># sample graph implemented as a dictionary
  graph = {'A': ['B', 'C', 'E'],
           'B': ['A','D', 'E'],
           'C': ['A', 'F', 'G'],
           'D': ['B'],
           'E': ['A', 'B','D'],
           'F': ['C'],
           'G': ['C']}
  
  # visits all the nodes of a graph (connected component) using BFS
  def bfs_connected_component(graph, start):
     # keep track of all visited nodes
     explored = []
     # keep track of nodes to be checked
     queue = [start]
  
     # keep looping until there are nodes still to be checked
     while queue:
         # pop shallowest node (first node) from queue
         node = queue.pop(0)
         if node not in explored:
             # add node to list of checked nodes
             explored.append(node)
             neighbours = graph[node]
  
             # add neighbours of node to queue
             for neighbour in neighbours:
                 queue.append(neighbour)
     return explored
  
  bfs_connected_component(graph,'A') # returns ['A', 'B', 'C', 'E', 'D', 'F', 'G']
  </code></pre>