I have the following code to evaluate my expression tree. But the problem is it gives me wrong answer. I have tested around and found that when I code
double left = (double) Character.digit((char) evaluateTree(t.left),
10);
left value gets equal to -1 which I believe the double value of '+'. When I call root.left (which is '+') and try to get its double value with the Character.digit(char) it gives me -1. Since my tree is like :
//My infix : (2+5)*7 MyPostfix : 25+7*
*
/ \
+ 7
/ \
2 5
Evaluate method :
public double evaluateTree(TreeNode t) {
if(root == null)
return 0;
if (Character.isDigit(t.ch))
return (double)t.ch;
else {
char c = t.ch;
double left = (double) Character.digit((char) evaluateTree(t.left),
10);
double right = (double) Character.digit(
(char) evaluateTree(t.right), 10);
//checks what to do for operators for example for '+' return left+right
return evaluate(c, left, right);
}
}
Current result = -7.0
How do I fix this problem?
public double evaluate(char c, double left, double right) {
double result = 0;
switch (c) {
case '+':
result = left + right;
break;
case '-':
result = left - right;
break;
case '*':
result = left * right;
break;
case '/':
result = left / right;
break;
case '%':
result = left % right;
break;
}
return result;
}
Don't call Character.digit()
on the result of evaluateTree()
. evaluteTree()
and evaluate()
return a double
, not a character that needs to be turned into a double. It's
if (Character.isDigit(t.ch))
return (double)t.ch;
where you need the Character.digit()
call.