Tree 对表达式树求值

Tree 对表达式树求值,tree,expression-trees,Tree,Expression Trees,我正在处理的这个项目需要从一个以char类型表示的单位数操作数和运算符字符串构造表达式树。我做了实施,程序在那一点上运行良好。我能够以正确的方式打印出顺序、前序和后序遍历 最后一部分要求计算表达式树。参数是表达式树t及其根。表达式树为3+2+6+2,等于13。相反,我得到的答案是11。很明显,我在这里遗漏了一些东西,除了把头撞在桌子上,我什么都做了 如果有人能给我指出正确的方向,我将不胜感激 请注意,在这一点上,我只测试加法,并将在这个方法工作时添加其他操作符 public int evalEx

我正在处理的这个项目需要从一个以char类型表示的单位数操作数和运算符字符串构造表达式树。我做了实施,程序在那一点上运行良好。我能够以正确的方式打印出顺序、前序和后序遍历

最后一部分要求计算表达式树。参数是表达式树t及其根。表达式树为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();
    }
}

如果没有你正在运行的实际树,任何人都无法帮助你。您是否尝试过实际调试它以进行更改


你知道,放一些断点,一步一步地看看它是怎么做的吗?

从内部大小写中的evalExpression调用中得到的x和y值已经是整数了,因此不需要调用Character.getNumericValue。我认为这应该发生在leaf案例中。

我为您修复了它:

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());
 }

我知道问题出在哪里了。else块中的值应返回Character.getNumericValue root.element。现在一切正常。嗨,以色列,这并没有回答原帖中的问题。