public double evaluate(EvaluationNode node) { if (node == null) { return(0); } else if (node.getNodeType() == EvaluationNodeType.NUMBER) { NumberNode numberNode = (NumberNode)node; return(numberNode.evaluate()); } else if (node.getNodeType() == EvaluationNodeType.VARIABLE) { VariableNode variableNode = (VariableNode)node; return(variableNode.evaluate(x)); } else if (node.getNodeType() == EvaluationNodeType.FUNCTION) { FunctionNode functionNode = (FunctionNode)node; return(functionNode.evaluate(x)); } else { OperatorNode operatorNode = (OperatorNode)node; double a = evaluate(node.left); double b = evaluate(node.right); return(operatorNode.evaluate(a, b)); } }