public void VisitBreadthFirst_ShouldWalkInCorrectOrder() { var visitedOrder = new List <string>(); var forestNodes = CreateForestNodes(); var target = new ForestVisitor <TestNode>(node => forestNodes.Where(n => n.ParentId == node.Id)); target.VisitBreadthFirst( // Start from root nodes. startNodes: forestNodes.Where(node => node.ParentId == null), // As we visit them, add their ids to the result list. action: visitedNode => visitedOrder.Add(visitedNode.Id)); visitedOrder.Should().Equal(new List <string> { "1", "2", "11", "12", "21", "22", "111", "112", "113", }); }
static void Main(string[] args) { IForestVisitor <TextNode> visitor = new ForestVisitor <TextNode>(node => _nodes.Where(n => n.ParentId == node.Id) ); var rootNodes = _nodes.Where(node => node.ParentId == null); Console.WriteLine("Visiting nodes depth first..."); visitor.VisitDepthFirst( rootNodes, node => Console.WriteLine(node.Id)); Console.WriteLine("... breadth first ..."); visitor.VisitBreadthFirst( rootNodes, node => Console.WriteLine(node.Id)); Console.WriteLine("... and bottom up."); visitor.VisitBottomUp( rootNodes, node => Console.WriteLine(node.Id)); }