code: def sorted_bfs_edges(G, source=None):
      if source is None:
          source = G.root
      xpos = horizontal_positions(G, source)
      visited = set([source])
      source_children = get_child_nodes(G, source)
      queue = deque([(source, iter(sorted(source_children,
                                          key=lambda x: xpos[x])))])
      while queue:
          parent, children = queue[0]
          try:
              child = next(children)
              if child not in visited:
                  yield parent, child
                  visited.add(child)
                  grandchildren = get_child_nodes(G, child)
                  queue.append((child, iter(sorted(grandchildren,
                                                   key=lambda x: xpos[x]))))
          except StopIteration:
              queue.popleft()