Exemplo n.º 1
0
        /// <summary>
        /// Performs a depth first traversal on this tree with the specified visitor.
        /// </summary>
        /// <param name="orderedVisitor">The ordered visitor.</param>
        public virtual void DepthFirstTraversal(OrderedVisitor <T> orderedVisitor)
        {
            if (orderedVisitor.HasCompleted)
            {
                return;
            }
            else
            {
                // Preorder visit
                orderedVisitor.VisitPreOrder(Data);

                if (leftSubtree != null)
                {
                    leftSubtree.DepthFirstTraversal(orderedVisitor);
                }

                // Inorder visit
                orderedVisitor.VisitInOrder(data);

                if (rightSubtree != null)
                {
                    rightSubtree.DepthFirstTraversal(orderedVisitor);
                }

                // PostOrder visit
                orderedVisitor.VisitPostOrder(Data);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs a depth first traversal on this tree with the specified visitor.
        /// </summary>
        /// <param name="orderedVisitor">The ordered visitor.</param>
        /// <exception cref="ArgumentNullException"><paramref name="orderedVisitor"/> is a null reference (<c>Nothing</c> in Visual Basic).</exception>
        public virtual void DepthFirstTraversal(OrderedVisitor <T> orderedVisitor)
        {
            Guard.ArgumentNotNull(orderedVisitor, "orderedVisitor");

            if (orderedVisitor.HasCompleted)
            {
                return;
            }

            // Preorder visit
            orderedVisitor.VisitPreOrder(Data);

            if (leftSubtree != null)
            {
                leftSubtree.DepthFirstTraversal(orderedVisitor);
            }

            // In-order visit
            orderedVisitor.VisitInOrder(data);

            if (rightSubtree != null)
            {
                rightSubtree.DepthFirstTraversal(orderedVisitor);
            }

            // PostOrder visit
            orderedVisitor.VisitPostOrder(Data);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Visits the node in an inorder fashion.
 /// </summary>
 /// <param name="node">The node.</param>
 /// <param name="visitor">The visitor.</param>
 private void VisitNode(RedBlackTreeNode <TKey, TValue> node, OrderedVisitor <KeyValuePair <TKey, TValue> > visitor)
 {
     if (node != null)
     {
         var pair = new KeyValuePair <TKey, TValue>(node.Key, node.Value);
         visitor.VisitPreOrder(pair);
         VisitNode(node.Left, visitor);
         visitor.VisitInOrder(pair);
         VisitNode(node.Right, visitor);
         visitor.VisitPostOrder(pair);
     }
 }
Exemplo n.º 4
0
        public void InnerVisitorShouldBeCalledOnEachVisi_Method()
        {
            var innerVisitor   = new Mock <IVisitor <int> >();
            var orderedVisitor = new OrderedVisitor <int>(innerVisitor.Object);


            orderedVisitor.Visit(1);
            orderedVisitor.VisitInOrder(0);
            orderedVisitor.VisitPostOrder(-3);
            orderedVisitor.VisitPreOrder(5);

            innerVisitor.Verify(x => x.Visit(1));
            innerVisitor.Verify(x => x.Visit(0));
            innerVisitor.Verify(x => x.Visit(-3));
            innerVisitor.Verify(x => x.Visit(5));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Visits the node in an in-order fashion.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <param name="visitor">The visitor.</param>
        private static void VisitNode(BinaryTree <T> node, OrderedVisitor <T> visitor)
        {
            if (node != null)
            {
                var pair = node.Data;

                visitor.VisitPreOrder(pair);

                VisitNode(node.Left, visitor);

                visitor.VisitInOrder(pair);

                VisitNode(node.Right, visitor);

                visitor.VisitPostOrder(pair);
            }
        }
Exemplo n.º 6
0
        public void InnerVisitorShouldBeCalledOnEachVisi_Method()
        {
            var mockRepository = new MockRepository();
            var innerVisitor   = mockRepository.StrictMock <IVisitor <int> >();

            var orderedVisitor = new OrderedVisitor <int>(innerVisitor);

            innerVisitor.Visit(1);
            innerVisitor.Visit(0);
            innerVisitor.Visit(-3);
            innerVisitor.Visit(5);

            mockRepository.ReplayAll();

            orderedVisitor.Visit(1);
            orderedVisitor.VisitInOrder(0);
            orderedVisitor.VisitPostOrder(-3);
            orderedVisitor.VisitPreOrder(5);

            mockRepository.VerifyAll();
        }
Exemplo n.º 7
0
        public void InnerVisitorShouldBeCalledOnEachVisi_Method()
        {
            var mockRepository = new MockRepository();
            var innerVisitor = mockRepository.StrictMock<IVisitor<int>>();

            var orderedVisitor = new OrderedVisitor<int>(innerVisitor);

            innerVisitor.Visit(1);
            innerVisitor.Visit(0);
            innerVisitor.Visit(-3);
            innerVisitor.Visit(5);

            mockRepository.ReplayAll();

            orderedVisitor.Visit(1);
            orderedVisitor.VisitInOrder(0);
            orderedVisitor.VisitPostOrder(-3);
            orderedVisitor.VisitPreOrder(5);

            mockRepository.VerifyAll();
        }
Exemplo n.º 8
0
        /// <summary>
        ///   Performs a depth first traversal on this tree with the specified visitor.
        /// </summary>
        /// <param name="orderedVisitor"> The ordered visitor. </param>
        public void DepthFirstTraversal(OrderedVisitor <T> orderedVisitor)
        {
            if (orderedVisitor.HasCompleted)
            {
                return;
            }

            // Preorder visit
            orderedVisitor.VisitPreOrder(Data);
            if (Left != null)
            {
                Left.DepthFirstTraversal(orderedVisitor);
            }
            // Inorder visit
            orderedVisitor.VisitInOrder(Data);
            if (Right != null)
            {
                Right.DepthFirstTraversal(orderedVisitor);
            }
            // PostOrder visit
            orderedVisitor.VisitPostOrder(Data);
        }