code: def _bfs(root_node, process_node):
      
  
      from collections import deque
  
      seen_nodes = set()
      next_nodes = deque()
  
      seen_nodes.add(root_node)
      next_nodes.append(root_node)
  
      while next_nodes:
          current_node = next_nodes.popleft()
  
          # process current node
          process_node(current_node)
  
          for child_node in current_node.children:
              if child_node not in seen_nodes:
                  seen_nodes.add(child_node)
                  next_nodes.append(child_node)
docs: Implementation of Breadth-first search (BFS) on caffe network DAG
      :param root_node: root node of caffe network DAG
      :param process_node: function to run on each node