评估表达式树

时间:2010-04-24 21:54:32

标签: tree expression-trees

我正在研究的这个项目要求表达式树由一串数字操作数和运算符构成,两者都表示为char类型。我做了implmentation和程序到目前为止工作正常。我能够以正确的方式打印出顺序,预订和后序遍历。

最后一部分要求评估表达式树。参数是表达式树“t”及其根“root”。表达式树是((3 + 2)+(6 + 2)),等于13.相反,我得到11作为答案。很显然,我在这里遗漏了一些东西,而且我已经做了一切,只是把头撞在桌子上。

如果有人能指出我正确的方向,我将不胜感激。

(请注意,此时我只测试添加,当我使用此方法时,将添加其他运算符。)

public int evalExpression( LinkedBinaryTree t, BTNode root ) {
    if( t.isInternal( root ) ) {
        int x = 0, y = 0, value = 0;
        char operator = root.element();
        if( root.getLeft() != null )
            x = evalExpression(t, t.left( root ) );
        if( root.getRight() != null )
            y = evalExpression(t, t.right( root ) );
        if( operator == '+' ) {
            value = value + Character.getNumericValue(x) + Character.getNumericValue(y);
        }
        return value;
    } else {
        return root.element();
    }
}

3 个答案:

答案 0 :(得分:0)

如果没有真正的树,你就可以在这里运行,很少有人可以帮助你。您是否尝试实际调试它以进行更改?

你知道,提出一些断点并一步一步看看它的作用吗?

答案 1 :(得分:0)

在“内部”情况下从evalExpression调用获得的x和y值已经是整数,因此您不需要在那里调用Character.getNumericValue。我认为这应该发生在“叶子”的情况下。

答案 2 :(得分:-1)

我为您修复了此问题

Public int evaluate(BSTNode node){
        Int x=0, y=0, val=0;
        char operator =   node.getString().charAt(0);
        If(node.getLeft()!=null)
               x= evaluate(node.getLeft());
        If(node.getRight()!=null)
               x= evaluate(node.getRight());      

        If(operator== '+'){
               val= x+y;
               return val;
         }

        If(operator== '-'){
               val= x-y;
               return val;
         }
        If(operator== '*'){
               val= x*y;
               return val;
         }
        If(operator== '/'){
               val= x/y;
               return val;
         }
        return Integer.parseInt(node.getString());
 }