package ch.usi.inf.sp.graph; import java.util.*; public class Traversal { public static , N extends Node, E extends Edge> List getNodesInReversePostOrder(final DiGraph graph, final N entryNode) { final List 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 , N extends Node, E extends Edge> List getNodesInPostOrder(final DiGraph graph, final N entryNode) { //TODO return null; } // probably add a method dfsWalk(...) }