2010-04-24 2 views
-2

제가 작업하고있는이 프로젝트는 한자리수의 피연산자와 연산자가 모두 char 유형으로 표현 된 문자열로 표현식 트리를 구성해야합니다. 나는 임 플리 멘 테이션을했고 그 시점까지의 프로그램은 잘 작동한다. inorder, preorder 및 postorder 순회를 올바른 방법으로 인쇄 할 수 있습니다.표현 트리를 평가하십시오

마지막 부분은 표현 트리를 evaulating하기를 요구합니다. 매개 변수는 표현식 트리 "t"와 루트 "root"입니다. 표현 트리는 (3 + 2) + (6 + 2)입니다. 13과 같습니다. 대신 11로 답을 얻습니다. 분명히 나는 ​​여기서 뭔가를 놓치고 책상을 상대로 머리를 때리는 일을 모두 끝냈습니다.

누군가가 올바른 방향으로 나를 가리킬 수 있으면 크게 감사하겠습니다.

(I는 또한 테스트 그리고 난이 방법의 작업을 얻을 때 다른 사업자에 추가합니다이 시점에서 참고.) 실제 트리없이

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

당신이 거기에이를 실행 아주 조금이라도 당신을 도울 수 있습니다. 실제로 변경을 위해 디버그하려고 했습니까?

아시다시피, 몇 가지 중단 점을 넣고 단계별로 진행하십시오.

0

"내부"케이스의 evalExpression 호출에서 가져온 x 및 y 값은 이미 정수이므로 Character.getNumericValue에 대한 호출이 필요하지 않습니다. 나는 그것이 "잎"의 경우에 대신 일어나야한다고 생각한다.