2010-04-24 109 views
-2

我正在处理的这个项目要求表达式树由一个数字操作数和操作符的字符串构成,这两个操作数和操作符都表示为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(); 
    } 
} 
+0

我想出了问题所在。 else块中的值应该返回Character.getNumericValue(root.element())。一切正常,现在应该如此。 – Phronima 2010-04-25 06:05:26

回答

0

没有实际的树你上有运行此任何人都无法帮助你。您是否试图实际调试它以进行更改?

你知道吗,把一些断点和一步一步看看它做什么?

0

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