(graph)
return order
Time complexity is the same as DFS, which is O(V + E)
        Space complexity: O(V)
Time complexity is the same as DFS, which is O(V + E)
        Space complexity: O(V)
Time complexity is the same as DFS which is O ( V + E ) Space complexity : O ( V )
def top_sort_recursive(graph):
    """ Time complexity is the same as DFS, which is O(V + E)
        Space complexity: O(V)
    """
    order, enter, state = [], set(graph), {}
    
    def dfs(node):
        state[node] = GRAY
        #print(node)
        for k in graph.get(node, ()):
            sk = state.get(k, None)
            if sk == GRAY:
                raise ValueError("cycle")
            if sk == BLACK:
                continue
            enter.discard(k)
            dfs(k)
        order.append(node)
        state[node] = BLACK
        
    while enter: dfs(enter.pop())
    return order
def top_sort_recursive ( graph ) : order , enter , state = [ ] , set ( graph ) , { } def dfs ( node ) : state [ node ] = GRAY #print(node) for k in graph . get ( node , ( ) ) : sk = state . get ( k , None ) if sk == GRAY : raise ValueError ( "cycle" ) if sk == BLACK : continue enter . discard ( k ) dfs ( k ) order . append ( node ) state [ node ] = BLACK while enter : dfs ( enter . pop ( ) ) return order