2012-03-06 8 views
-1

ポインタや参照を使わずにリストを反復処理することができます。 場合によっては、実際にリストを持つ必要がなくなります。 が直接、実際にメモリ内にリストを格納することなく、リスト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); 

これはしばらく私を悩ませています。

+0

これはあなた自身で解決しようとしましたか?ポインタまたは参照を使用するツリーイテレータを記述します。 – Blender

+0

数値をテキストストリームに出力する関数は、シーケンスを表示していますが、リストを作成していません。抽象シーケンスはリストと同じものではありません。 – Kaz

+0

メモリに格納されていないリストを扱う場合は、遅延リストが必要です。遅延リストは、不定数の項目を生成する可能性があり、同様に、リストを消費する関数によって処理される可能性があり、すべて定数メモリ内で発生します。 (消費者がリストを下って行進しているため、ガベージコレクションであるフロントへの参照が失われています。)これにはまだポインタが含まれています。 – Kaz

答えて

0

リストを構築する代わりにシーケンスを印刷するのと同様に、ツリー構造を使用せずに表記法を印刷するには、まず表記の外観を決める必要があります。

例を書き留めてもいいですか?

たとえば、Lispのような表記法ですか?

((1 2)(3 4));;それはあなたが印刷することになっている多くの可能なバイナリツリーの10番リーフノードがあるでしょう意味、10の上限を与え、木も

ですか?

ストレートリストが縮退バイナリ木ですので、実際にループのためのあなたのシンプルは、基本的には宿題の問題を満たしています。

+0

私は、ツリーのインデックスと要素のリストがある表記が必要です。例えば、[(i0、 'a')、(i1、 'b')、(i2、 'c')]ここで、i0、i1、そしてi2は正しい記法を思いつくのに問題があります。 –

2

存在しないデータを反復処理することはできません。最初の例で示されているのは、0または1の10回の印刷を行うループです。配列(または他のデータ構造)を反復するという考え方は、配列要素の合計を計算するなどの方法で各要素を処理することです。

言い換えれば、最初の例では、別の次の0と1である10個の要素、一つのアレイ上に反復をエミュレートしています。したがって、各反復で、そのインデックスに基づいて値を予測しています。

バイナリツリーの子ノードのインデックスを計算する場合は、の配分式を使用できます.2n + 1と2n + 2は、それぞれ左ノードと右ノードのインデックスを計算します.nは0〜ベースインデックス。計算されたインデックスに基づいて、ノードの値をエミュレートできます。

+0

ツリーデータ構造のインデックスをわかりやすく示してくれてありがとうございます。しかし、反復を止めるときに与えるリストの上限をどのように表現できますか? –

+0

これはバイナリツリーなので、n要素のパワーで2つ - 1はn-levelツリーの要素の最大数を与えます:2^n-1 – ahanin

+0

これは私が意味するものではありません。私は木型のスケルトンが必要です。ユニット型要素のツリーの表現。 –

関連する問題