コード例 #1
0
        /// <summary>
        /// Recursively Visits All nodes in tree applying a given action to all nodes.
        /// By default this method traverses the tree in inorder fashion.
        /// </summary>
        public static void ForEach <T>(BSTNode <T> BinaryTreeRoot, Action <T> Action, TraversalMode Mode = TraversalMode.InOrder) where T : IComparable <T>
        {
            if (BinaryTreeRoot == null)
            {
                throw new ArgumentNullException("Tree root cannot be null.");
            }

            if (Action == null)
            {
                throw new ArgumentNullException("Action<T> Action cannot be null.");
            }

            // Traverse
            switch (Mode)
            {
            case TraversalMode.PreOrder:
                BinaryTreeRecursiveWalker.PreOrderVisitor(BinaryTreeRoot, Action);
                return;

            case TraversalMode.InOrder:
                BinaryTreeRecursiveWalker.InOrderVisitor(BinaryTreeRoot, Action);
                return;

            case TraversalMode.PostOrder:
                BinaryTreeRecursiveWalker.PostOrderVisitor(BinaryTreeRoot, Action);
                return;

            default:
                BinaryTreeRecursiveWalker.InOrderVisitor(BinaryTreeRoot, Action);
                return;
            }
        }
コード例 #2
0
        /// <summary>
        /// Private helper method for Inorder Traversal.
        /// </summary>
        private static void InOrderVisitor <T>(BSTNode <T> BinaryTreeRoot, Action <T> Action) where T : IComparable <T>
        {
            if (BinaryTreeRoot == null)
            {
                return;
            }

            BinaryTreeRecursiveWalker.InOrderVisitor <T>(BinaryTreeRoot.LeftChild, Action);
            Action(BinaryTreeRoot.Value);
            BinaryTreeRecursiveWalker.InOrderVisitor <T>(BinaryTreeRoot.RightChild, Action);
        }