40 lines
1.2 KiB
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(...)
|
|
|
|
}
|