public void Traverse <T>(IGeneralTree <T> tree, IVisitor visitor) { if (!tree.RootNode.Children.Any()) { tree.RootNode.Accept(visitor); return; } var workingStack = new Stack <INode <T> >(); var stackForVisit = new Stack <INode <T> >(); workingStack.Push(tree.RootNode); while (workingStack.Any()) { var node = workingStack.Pop(); stackForVisit.Push(node); foreach (var nodeChild in node.Children) { workingStack.Push(nodeChild); } } while (stackForVisit.Any()) { var node = stackForVisit.Pop(); node.Accept(visitor); } }
public INode <T> TrySearch <T>(IGeneralTree <T> tree, int nodeId, ITraversalStrategy traverser) { var searchVisitor = new SearchByNodeIdVisitor <T> { SearchId = nodeId }; traverser.Traverse(tree, searchVisitor); return(searchVisitor.FoundNode); }
public void Traverse <T>(IGeneralTree <T> tree, IVisitor visitor) { if (!tree.RootNode.Children.Any()) { tree.RootNode.Accept(visitor); return; } var nodeQueue = new Queue <INode <T> >(); nodeQueue.Enqueue(tree.RootNode); while (nodeQueue.Any()) { var node = nodeQueue.Dequeue(); node.Accept(visitor); foreach (var nodeChild in node.Children) { nodeQueue.Enqueue(nodeChild); } } }
public void Traverse <T>(IGeneralTree <T> tree, IVisitor visitor) { if (!tree.RootNode.Children.Any()) { tree.RootNode.Accept(visitor); return; } var nodeStack = new Stack <INode <T> >(); nodeStack.Push(tree.RootNode); while (nodeStack.Any()) { var node = nodeStack.Pop(); node.Accept(visitor); foreach (var nodeChild in node.Children.Reverse()) { nodeStack.Push(nodeChild); } } }
public void Traverse <T>(IGeneralTree <T> tree, IVisitor visitor) { WasTraversed = true; }