【问题标题】:Evaluating Expression Tree评估表达式树
【发布时间】:2015-03-24 23:55:27
【问题描述】:

我有以下代码来评估我的表达式树。但问题是它给了我错误的答案。我已经测试过,发现当我编码时

double left = (double) Character.digit((char) evaluateTree(t.left),
                    10);

left 值等于 -1,我相信 '+' 的 double 值。当我调用 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;

    }

【问题讨论】:

  • evaluate()?在哪里
  • @EJP 添加了评估。

标签: java tree infix-notation evaluate


【解决方案1】:

不要在evaluateTree() 的结果上调用Character.digit()。 evaluteTree() 和 evaluate() 返回一个 double,而不是需要变成双精度的字符。这是

if (Character.isDigit(t.ch))
    return (double)t.ch;

您需要在哪里拨打Character.digit()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2016-08-03
    相关资源
    最近更新 更多