このWikipediaの記事で説明されているツリートラバーサルメソッドは、予約注文、注文注文、および注文注文です。これらの方法は二分木に限定されていますか?アルゴリズムは、左と右の子に関して定義されているようです。n進ツリーに使用できる場合、どのようにですか?
n-aryツリーには、任意のノードに1つの親とnの子があります。ここで、nは各ノードの任意の整数です。
必要な場合は、下の図を使用してこれを説明してください。
このWikipediaの記事で説明されているツリートラバーサルメソッドは、予約注文、注文注文、および注文注文です。これらの方法は二分木に限定されていますか?アルゴリズムは、左と右の子に関して定義されているようです。n進ツリーに使用できる場合、どのようにですか?
n-aryツリーには、任意のノードに1つの親とnの子があります。ここで、nは各ノードの任意の整数です。
必要な場合は、下の図を使用してこれを説明してください。
回答:
いいえ、二分木に限定されません。はい、プリオーダーとポストオーダーは進ツリーに使用できます。Wikipediaの記事の「左のサブツリーをトラバースする...右のサブツリーをトラバースする...」の手順を「各子について:トラバース関数を再帰的に呼び出して、その子をルートとするサブツリーをトラバースする」に置き換えるだけです。forループは、データ構造で見つかった順序で子を反復処理することを想定しています。たとえば、ここで示したような図では、左から右の順序で繰り返します。
実際、これはツリートラバーサルに関するWikipediaの記事で既に説明されています。https://en.wikipedia.org/wiki/Tree_traversal#Generic_treeを参照してください。これは、これを進ツリーに一般化する方法を正確に説明しています。予約注文トラバーサルは、予約注文操作が「現在のノードの表示」で、注文注文操作が「何もしない」であるトラバーサルです。注文後のトラバーサルとは、注文前の操作が「何もしない」で、注文後の操作が「現在のノードの表示」であるものです。
順序トラバーサルは特殊なケースです。おそらく、二分木に対してのみ意味があります。進ツリーの順序トラバーサルを定義する方法はいくつか考えられますが、それらはそれぞれ少し奇妙で不自然に感じられ、おそらく実際にはそれほど役に立ちません。したがって、順序トラバーサルはバイナリツリーに固有のものと考えるのがおそらく最善です。ツリーの順序どおりのトラバーサルのようなものを実行したい場合は、その意味が正確に決定する必要があります。これには標準的な意味がないためです。
CS全体で多くの異質なデータ構造が使用されています。による順序付けされた方法でn進ツリーをトラバースすることについて、同様の最近の質問(現在は削除済み)がありましたoverexchange
。研究された文献のほとんどまたは多くのn分木は順序付けられていない傾向があるようです。ただし、他の詳細な回答の別のpov /例外/「エッジ」のケースとして、「奇数で不自然ではなく、実際にはあまり役立たない」順序付けられたn進ツリーのケースがあります。ここに1つの参照があります。他にも多くのケースが考えられますが、広範囲に使用されていない可能性もあります。
[1] n-ary ordered trees / P Mateti 7140コースノート