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