ポインタや参照を使わずにリストを反復処理することができます。 場合によっては、実際にリストを持つ必要がなくなります。 が直接、実際にメモリ内にリストを格納することなく、リスト0 1 0 1 0 1 0 1 0 1を出力し、次のコード、ポインタや参照を使用せずにバイナリツリーを反復処理する方法はありますか?
int i;
for (i = 0; i < 10; ++i)
printf("%i ", i % 2);
を考えます。
バイナリツリーで同様のことを行うにはどうすればよいですか?
次のコードでは、tree_iterator、new_root_tree_iterator、およびtraverse_tree_iteratorを実装する方法を示してください。ここで、upper_boundary_of_treeはリストの例の数字10に似ていて、定義方法はわかりません。
人々は私がupper_boundary_of_treeによって何を意味するかとの問題を抱えてきました。木の上の境界は数字10で表されません。木の上境界を表現する方法はわかりません。これは質問の一部です。ツリーの上の境界は、上記のリストコードで数字10がどのように使われているかと同じです。同じ関数で反復を止める位置をマークしていますが、全く同じことではありません。
あなたはあなたに必要がある場合にもfree_tree_iterator機能を持たせることができます。
tree_iterator i = new_root_tree_iterator();
while (traverse_tree_iterator(&i, upper_boundary_of_tree))
foobar(i);
これはしばらく私を悩ませています。
これはあなた自身で解決しようとしましたか?ポインタまたは参照を使用するツリーイテレータを記述します。 – Blender
数値をテキストストリームに出力する関数は、シーケンスを表示していますが、リストを作成していません。抽象シーケンスはリストと同じものではありません。 – Kaz
メモリに格納されていないリストを扱う場合は、遅延リストが必要です。遅延リストは、不定数の項目を生成する可能性があり、同様に、リストを消費する関数によって処理される可能性があり、すべて定数メモリ内で発生します。 (消費者がリストを下って行進しているため、ガベージコレクションであるフロントへの参照が失われています。)これにはまだポインタが含まれています。 – Kaz