18

誰もがC#で逆幅優先トラバーサルアルゴリズムをすぐに実装できますか?

逆幅優先走査とは、共通ノードから開始してツリーを検索するのではなく、ツリーを下から検索し、徐々に共通ノードに収束させたいという意味です。

次の図を見てみましょう。これは幅優先探索の出力です。 代替テキスト

私の逆幅優先探索では9、、、、10が最初に見つかったいくつかのノードになります(これらはすべて一次であるため、順序は重要ではありません)。、、、およびは2番目に見つかったノードであり、以下同様です。最後に見つかったノードになります。111256781

アイデアや指針はありますか?

編集:質問を明確にするために、「幅優先探索」を「幅優先トラバーサル」に変更します

4

2 に答える 2

20

スタックとキューの組み合わせを使用します。

キューを使用して「通常の」BFSを実行し(これはすでに実行していると思います)、ノードに遭遇したときにスタック上のノードをプッシュし続けます。

BFSを使用すると、スタックにはBFSの逆順が含まれます。

于 2010-04-05T14:54:27.420 に答える
7

から通常のBFSを実行し、rootNodeを許可しdepth[i] = linked list of nodes with depth iます。したがって、あなたの例では、次のようになります。

depth[1] = {1}, depth[2] = {2, 3, 4} etc.。これは、単純なBFS検索で構築できます。次に、のすべてのノードを印刷しdepth[maxDepth]、次にdepth[maxDepth - 1]などのノードを印刷します。

ノードiの深さは、その親ノードの深さ+1に等しくなります。ルートノードの深さは、1または0と見なすことができます。

于 2010-04-05T15:03:57.953 に答える