2011-10-31 2 views
2

이 트리에서 InOrder 순회를 구현하려면 어떻게해야합니까? 나는 (3-2-1과 같이) 연산자도 인쇄해야합니다.InOrder 트리 순회

나는이 수업을 :

public class BinaryOperator extends Value { 
    private Value firstOperand; 
    private Value secondOperand; 
    private String operator; 

    public BinaryOperator(Value firstOperand, Value secondOperand, 
      String operator) { 
     this.firstOperand = firstOperand; 
     this.secondOperand = secondOperand; 
     this.operator = operator; 
    } 
} 

public class Number extends Value { 
    private Integer value; 

    public Number(Integer value) { 
     this.value = value; 
    } 
} 

Tree

 Root 
     /\ 
     /\ 
     BO Num 
     /\ 
    /\ 
    BO OP Num 
    /\ 
/\ 
Num OP Num 

explanation: 
- BO: binary operator - consists of two children which may be Num or another BO 
- Num: just a number 
- OP: operation like +-... 

답변

3

이를 구현하는 표준 방법은 나무를 통해 단순히 같이 Recurse입니다.
먼저 왼쪽 하위 트리를 반복적으로 통과 한 다음 연산자를 인쇄 한 다음 오른쪽 하위 트리를 재귀 적으로 통과합니다.

고급 구현은 반복기 및 방문자 디자인 패턴을 사용하는 것이지만 숙제 문제이기 때문에 할당 범위를 벗어난 것으로 간주합니다.

+0

실제로 이터레이터를 사용하고 싶습니다. 순회를 실행하고 요소를 배열에 넣은 다음이를 읽는 것이 좋습니다. – user219882

+0

좋은 질문입니다! 단점은 통과하는 동안 요소를 삭제할 수 없다는 것입니다. 각 노드의 부모 노드에 대한 링크를 사용하는 것이 더 좋지만 이렇게하면 추가 유지 관리가 발생합니다. –

+0

'remove' 연산을 지원할 필요가 없으므로 가장 간단한 방법으로 처리했습니다. 고맙습니다... – user219882