sp-04/src/ch/usi/inf/sp/graph/Traversal.java

40 lines
1.2 KiB
Java

package ch.usi.inf.sp.graph;
import java.util.*;
public class Traversal {
public static <G extends DiGraph<N, E>, N extends Node<E>, E extends Edge<N>>
List<N> getNodesInReversePostOrder(final DiGraph<N, E> graph, final N entryNode) {
final List<N> orderedNodes = getNodesInPostOrder(graph, entryNode);
Collections.reverse(orderedNodes);
return orderedNodes;
}
/**
* From: https://eli.thegreenplace.net/2015/directed-graph-traversal-orderings-and-applications-to-data-flow-analysis/
*
* def postorder(graph, root):
* """Return a post-order ordering of nodes in the graph."""
* visited = set()
* order = []
* def dfs_walk(node):
* visited.add(node)
* for succ in graph.successors(node):
* if not succ in visited:
* dfs_walk(succ)
* order.append(node)
* dfs_walk(root)
* return order
*/
public static <G extends DiGraph<N, E>, N extends Node<E>, E extends Edge<N>>
List<N> getNodesInPostOrder(final DiGraph<N, E> graph, final N entryNode) {
//TODO
return null;
}
// probably add a method dfsWalk(...)
}