public void BFS(ChannelsVisitor visitor) { var wasEnqueued = new HashSet <Channel>(); var queue = new Queue <Channel>(); foreach (var root in entrances) { if (!wasEnqueued.Contains(root)) { queue.Enqueue(root); wasEnqueued.Add(root); while (queue.Count > 0) { var channel = queue.Dequeue(); foreach (var child in channel.Connecions) { if (!wasEnqueued.Contains(child)) { queue.Enqueue(child); wasEnqueued.Add(child); } } visitor(channel); } } } }
private void VisitChannelsFromTopRec(Channel channel, ChannelsVisitor visitor) { visitor(channel); foreach (var child in channel.Connecions) { VisitChannelsFromTopRec(child, visitor); } }
public void VisitChannelsFromBottom(ChannelsVisitor visitor) { VisitChannelsFromBottomRec(Root, visitor); }
public void VisitChannelsFromTop(ChannelsVisitor visitor) { VisitChannelsFromTopRec(Root, visitor); }