私はクラスBinarySearchTree
に2つのデータ要素、Node root
とint size
を持っています。 Node
クラスは、4つのデータ要素Node left, right, up
とint data
を持っています。バイナリ検索ツリーイテレータ - イン/プレ/ポストオーダー
コンストラクタがどのタイプのトラバーサルを使用するのかを示すIteratorクラスを作成したいとします。 next
が呼び出されたときにのみ、次の要素を反復処理します。
MyIterator
に含まれるデータ要素は、これが乱雑にならないようにする必要がありますか?私はおそらくStack<Node>
を持っていると思っているが、それは本当に悪い解決策のように感じる。可能なモードの3つすべてをカバーするために私ができることは何も賢いことはありますか?イテレータの内部に追加のデータ構造(キュー/スタック/マップ)を持たずにこれを行う方法はありますか?
public class MyIterator
{
private BinarySearchTree tree;
private Node current;
private int mode;
public MyIterator(BinarySearchTree tree, int mode)
{
// mode = 1 -> IN ORDER TRAVERSAL
// mode = 2 -> PREORDER TRAVERSAL
// mode = 3 -> POSTORDER TRAVERSAL
this.tree = tree;
this.mode = mode;
}
public boolean hasNext()
{
...
}
public void next()
{
...
}
}
これは私の意図ですが、イテレータ内に入るデータ要素/アルゴリズムであるコアの問題に簡単に言わせるために 'int'を使用しています。 – Hatefiend