} // End function /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Function: recursEval * * Input: ExpNode * * Output: double * * Description: A function that recursively traverse the expresssion* * tree making the appropriate operations, and returns * * the result. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ public double recursEval(ExpNode currNode) { if (currNode == null) { return(0); } else if (variables.ContainsKey(currNode.getValue())) { return(variables[currNode.getValue()]); } else { switch (currNode.getValue()) { case "+": { return(recursEval(currNode.getLeftChild()) + recursEval(currNode.getRightChild())); } break; case "-": { return(recursEval(currNode.getLeftChild()) - recursEval(currNode.getRightChild())); } break; case "*": { return(recursEval(currNode.getLeftChild()) * recursEval(currNode.getRightChild())); } break; case "/": { return(recursEval(currNode.getLeftChild()) / recursEval(currNode.getRightChild())); } break; } return(Double.Parse(currNode.getValue())); } } // End function
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Function: eval * * Input: string * * Output: double * * Description: A function evaluates the operations in the tree, * * by calling the recursive eval funcion. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ public double eval() { double result = 0; if (root.getValue() == "") { Console.WriteLine("No expression tree exists!"); return(0); } else { return(result = recursEval(root)); // Calls recursive function } } // End function