      "    queue.append(root)\n",
      "    root.visited = True\n",
      "    while queue:\n",
      "        node = queue.popleft()\n",
      "        visit_func(node.id)\n",
      "        for adjacent_node in node.adjacent:\n",
      "            if not adjacent_node.visited:\n",
      "                queue.append(adjacent_node)\n",
      "                adjacent_node.visited = True"
     ]
 
</s> remove     "        visit_func(node.data)\n",
 </s> add     "        visit_func(node)\n", </s> remove     "    visit_func(root.id)\n",
 </s> add     "    visit_func(root)\n",
    "        visit_func(node)\n",
      "    queue.append(root)\n",
      "    root.visited = True\n",
      "    while queue:\n",
      "        node = queue.popleft()\n",
    "        visit_func(node)\n",
      "        for adjacent_node in node.adjacent:\n",
      "            if not adjacent_node.visited:\n",
      "                queue.append(adjacent_node)\n",
      "                adjacent_node.visited = True"
     ]
keep keep keep keep replace keep keep keep keep keep
 Simplified challenge coding and unit tests by working with the node directly as opposed to node.id or node.data, which is more natural when writing coding challenges. 
graphs_trees/graph_bfs/bfs_solution.ipynb