Пример #1
0
        /// <summary>
        /// make an inorder traversal and compile the infix expression
        /// </summary>
        /// <param name="result"></param>
        /// <param name="currentNode"></param>
        /// <returns></returns>
        private List <T> VisitInOrder(List <T> result, ExpressionTreeNode <T> currentNode)
        {
            if (currentNode == null)
            {
                return(result);
            }

            VisitInOrder(result, currentNode.Left);
            result.Add(currentNode.Value);
            VisitInOrder(result, currentNode.Right);

            return(result);
        }
Пример #2
0
        /// <summary>
        /// construct tree for given expression with given operators
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="operators"></param>
        public void Construct(T[] expression, T[] operators)
        {
            expStack = new System.Collections.Generic.Stack <ExpressionTreeNode <T> >();

            foreach (var exp in expression)
            {
                var newNode = new ExpressionTreeNode <T>(exp);

                if (Contains(operators, exp))
                {
                    var right = expStack.Pop();
                    var left  = expStack.Pop();

                    newNode.Left  = left;
                    newNode.Right = right;
                }

                expStack.Push(newNode);
            }
        }