public void VisitDepthFirst_ShouldWalkInCorrectOrder() { var visitedOrder = new List <string>(); var forestNodes = CreateForestNodes(); var target = new ForestVisitor <TestNode>(node => forestNodes.Where(n => n.ParentId == node.Id)); target.VisitDepthFirst( // 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", "11", "111", "112", "113", "12", "2", "21", "22", }); }
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)); }