评估表达式树
Evaluating Expression Tree
我有以下代码来评估我的表达式树。但问题是它给了我错误的答案。我测试了一下,发现当我编码时
double left = (double) Character.digit((char) evaluateTree(t.left),
10);
左边的值等于 -1,我认为这是“+”的双倍值。当我调用 root.left(即“+”)并尝试使用 Character.digit(char) 获取它的双精度值时,它给了我 -1。因为我的树是这样的:
//My infix : (2+5)*7 MyPostfix : 25+7*
*
/ \
+ 7
/ \
2 5
评价方法:
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);
}
}
当前结果=-7.0
如何解决这个问题?
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;
}
不要对 evaluateTree()
的结果调用 Character.digit()
。 evaluteTree()
和 evaluate()
return 一个 double
,不是一个需要变成双数的字符。这是
if (Character.isDigit(t.ch))
return (double)t.ch;
您需要 Character.digit()
电话的地方。
我有以下代码来评估我的表达式树。但问题是它给了我错误的答案。我测试了一下,发现当我编码时
double left = (double) Character.digit((char) evaluateTree(t.left),
10);
左边的值等于 -1,我认为这是“+”的双倍值。当我调用 root.left(即“+”)并尝试使用 Character.digit(char) 获取它的双精度值时,它给了我 -1。因为我的树是这样的:
//My infix : (2+5)*7 MyPostfix : 25+7*
*
/ \
+ 7
/ \
2 5
评价方法:
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);
}
}
当前结果=-7.0
如何解决这个问题?
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;
}
不要对 evaluateTree()
的结果调用 Character.digit()
。 evaluteTree()
和 evaluate()
return 一个 double
,不是一个需要变成双数的字符。这是
if (Character.isDigit(t.ch))
return (double)t.ch;
您需要 Character.digit()
电话的地方。