Regenerating a rooted tree efficiently


I have a large number of rooted tree graphs, however often the data has the wrong root. I am trying to re-root each graph with the correct root. Currently, Given some new root vertex I figure I can generate a new edge list using a dfs, something like:

g = g.copy()
edges = gt.dfs_iterator(g, <new root ind>, array = True)

# make our new graph
g2 = gt.Graph(edges, hashed = True, hash_type = 'int')

# set directed

This also gives me the indicies of vertices in the original graph. What would be the best way to allow the new graph to properly inherit vertex and edge properties though, without necessarily knowing before hand necessarily which properties the original graph has?

Thanks in advance!

You should make all the properties internal, and then create a new graph with:

g2 = Graph(g, vorder=vorder)

where vorder is a vertex property map specifying the ordering of the vertices in the copied graph.