private static IEnumerable <IMapping> FindChildren(IMapping Mapping, Graph <IMapping> graph) { var ResultList = new List <IMapping>(); var StartingNodes = new Vertex <IMapping>[] { graph.Vertices.First(x => x.Data == Mapping) }.ToList(); while (StartingNodes.Count > 0) { var Vertex = StartingNodes.First(); StartingNodes.Remove(Vertex); ResultList.AddIfUnique(Vertex.Data); foreach (Edge <IMapping> Edge in Vertex.OutgoingEdges.ToList()) { Vertex <IMapping> Sink = Edge.Sink; Edge.Remove(); if (Sink.IncomingEdges.Count == 0) { ResultList.AddIfUnique(Sink.Data); StartingNodes.AddIfUnique(Sink); } } } return(ResultList); }