public static IEnumerable <TNode> DepthFirstTraversal <TNode>( this IGraph <TNode> graph, TNode startNode, DepthFirstTraversalOrdering ordering) { HashSet <TNode> travelledNodes = new HashSet <TNode>(); switch (ordering) { case DepthFirstTraversalOrdering.PreOrdering: return(DepthFirstTraversalVisitPreOrder(graph, startNode, travelledNodes)); case DepthFirstTraversalOrdering.PostOrdering: return(DepthFirstTraversalVisitPostOrder(graph, startNode, travelledNodes)); default: throw new ArgumentException(); } }
public static IEnumerable <TNode> DepthFirstTraversalAllNodes <TNode>( this IGraph <TNode> graph, DepthFirstTraversalOrdering ordering) { HashSet <TNode> travelledNodes = new HashSet <TNode>(); switch (ordering) { case DepthFirstTraversalOrdering.PreOrdering: foreach (var node in graph) { if (!travelledNodes.Contains(node)) { foreach (var node2 in DepthFirstTraversalVisitPreOrder(graph, node, travelledNodes)) { yield return(node2); } } } break; case DepthFirstTraversalOrdering.PostOrdering: foreach (var node in graph) { if (!travelledNodes.Contains(node)) { foreach (var node2 in DepthFirstTraversalVisitPostOrder(graph, node, travelledNodes)) { yield return(node2); } } } break; default: throw new ArgumentException(); } }