我正在处理的这个项目要求表达式树由一个数字操作数和操作符的字符串构成,这两个操作数和操作符都表示为char类型。我做了实践,到那时为止的程序工作正常。我能够以正确的方式打印inorder,preorder和postorder遍历。评估一个表达式树
最后一部分需要消除表达式树。参数是表达式树“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();
}
}
我想出了问题所在。 else块中的值应该返回Character.getNumericValue(root.element())。一切正常,现在应该如此。 – Phronima 2010-04-25 06:05:26