2011-10-31 19 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

これを実装するための標準的な方法は、木の上に単純に再帰です。
最初に、再帰的に左側のサブツリーを走査し、次に演算子を印刷してから、右側のサブツリーを再帰的に走査します。

より高度な実装では、イテレータとビジターのデザインパターンを使用することになりますが、これは宿題に関する質問であるため、割り当ての範囲外であると見なします。

+0

実際にイテレータを使いたいと思います。トラバーサルを実行し、要素を配列に入れて、それを読み取るだけの良い方法ですか? – user219882

+0

良い質問です!欠点は、トラバース中に要素を削除できないことです。各ノードの親ノードへのリンクを使用することをお勧めしますが、そうすることで余分なメンテナンスが発生します。 –

+0

私は 'remove'操作をサポートする必要がないので、私はそれを行う最も簡単な方法を使用しました。ありがとうございました... – user219882

関連する問題