Esempio n. 1
0
        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;
 }