2010-04-24 106 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。我認爲這應該發生在「葉子」案件中。