2010-04-24 6 views
-2

Этот проект, над которым я работаю, требует, чтобы дерево выражений было построено из строки одноразрядных операндов и операторов, представленных как символ типа. Я сделал приведение, и программа до этого момента отлично работает. Я могу корректно печатать обходные, предварительные и послевоенные обходы.Оценка дерева выражений

Последняя часть призывает к evaulating дерево выражений. Параметрами являются дерево выражений «t» и корень «root». Дерево выражений есть ((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

ответ

0

Без фактического дерева вы используете это на есть очень мало кто может сделать, чтобы помочь вам. Вы пытались на самом деле DEBUG его для изменения?

Знаете ли вы, некоторые моменты разлома и шаг за шагом, посмотрите, что он делает?

0

Значения x и y, которые вы получаете из вызовов evalExpression во «внутреннем» случае, уже являются целыми числами, поэтому вам не нужны вызовы Character.getNumericValue. Я думаю, что это должно происходить в случае «листа».