public void VisitBottomUp_ShouldWalkInCorrectOrder() { var visitedOrder = new List <string>(); var forestNodes = CreateForestNodes(); var target = new ForestVisitor <TestNode>(node => forestNodes.Where(n => n.ParentId == node.Id)); target.VisitBottomUp( // 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)); Assert.IsTrue(visitedOrder.IndexOf("1") > visitedOrder.IndexOf("2")); Assert.IsTrue(visitedOrder.IndexOf("1") > visitedOrder.IndexOf("11")); Assert.IsTrue(visitedOrder.IndexOf("11") > visitedOrder.IndexOf("111")); }
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)); }