def topo_sort_recursive(n: GraphNode, visited: Dict[GraphNode, bool], res: List[GraphNode]) -> List[GraphNode]: visited[n] = True for edge in n.edges: if not (visited[edge]): topo_sort_recursive(edge, visited, res) res.append(n) return res # Driver code for an acyclic, connected graph a = GraphNode(0) b = GraphNode(1) c = GraphNode(2) a.edges.append(b) a.edges.append(c) b.edges.append(c) a.print_edges() nodes = [a, b, c] dfs(a) dfs(b) bfs(a) topological_sort(nodes)