Yesterday after class, I figured out how to finish my Expression Tree and the Parser that takes the user's input.
Expression Tree:
using System; namespace Assignment5 { class ExpressionTree { public TreeNode<string> root; public int node_count; public ExpressionTree() { root = null; } // TODO Finish Evaluate public void Evaluate() { } public string TraversePre(MyList<string> list, TreeNode<string> node) { list.Add(node.data); if (node.left != null) TraversePre(list, node.left); if (node.right != null) TraversePre(list, node.right); return string.Join(", ", list); } public string TraverseIn(MyList<string> list, TreeNode<string> node) { if (node.left != null) TraverseIn(list, node.left); list.Add(node.data); if (node.right != null) TraverseIn(list, node.right); return string.Join(", ", list); } public string TraversePost(MyList<string> list, TreeNode<string> node) { if (node.left != null) TraversePost(list, node.left); if (node.right != null) TraversePost(list, node.right); list.Add(node.data); return string.Join(", ", list); } } }
Parser:
using System; using System.Collections; using System.Collections.Generic; namespace Assignment5 { class ExpressionParser { private Stack<TreeNode<string>> numberStack, operatorStack; public ExpressionParser(ExpressionTree ETree, string input) { numberStack = new Stack<TreeNode<string>>(); operatorStack = new Stack<TreeNode<string>>(); ToArray(ETree, input); } public void ToArray(ExpressionTree ETree, string input) { string[] expressions = new string[input.Length]; expressions = input.Split(); BuildNodes(expressions, ETree); } private void BuildNodes(string[] expressions, ExpressionTree ETree) { foreach (string item in expressions) { int tempInt; if (Int32.TryParse(item, out tempInt)) { TreeNode<string> number_node = new TreeNode<string> { data = tempInt.ToString() }; numberStack.Push(number_node); } else { TreeNode<string> operator_node = new TreeNode<string> { data = item }; operatorStack.Push(operator_node); } } BuildTree(ETree); } private void BuildTree(ExpressionTree ETree) { ETree.node_count = numberStack.Count + operatorStack.Count; while (operatorStack.Count != 0) { TreeNode<string> tempRoot = operatorStack.Pop(); tempRoot.right = numberStack.Pop(); tempRoot.left = numberStack.Pop(); numberStack.Push(tempRoot); } ETree.root = numberStack.Pop(); } } }
I will continue to work on this assignment. Thanks for reading!
No comments:
Post a Comment