6

深さ優先と幅優先の両方のトラバーサル順序で、任意のツリーのツリー トラバーサル アルゴリズムが必要です。注意が必要なのは、任意のノードから開始して、別の特定のノードを通過するまで継続できる必要があることです。

これで、通常のアルゴリズムのいずれかを使用して、開始ノードに到達するまでトラバースされたノードを無視し、終了ノードまで続行できます (現在はそうしています) が、これは見苦しく非効率的です。

何か提案があればお願いします。

更新: 各ノードには ID が関連付けられています。場合によっては、開始ノード参照と終了ノード参照を用意します。それ以外の場合は、2 つの ID が与えられ、指定されたノードが開始ノードであるか終了ノードであるかを、それらの ID を調べて確認します。深さ優先トラバーサルを使用して、開始ノードを見つけます。開始ノードと終了ノードはどちらも、階層内のどこにでも配置できます。開始ノードと終了ノードの両方への参照が既に与えられている場合、誰かがアイデアを思い付くことができることを願っています。ところで、ツリー内のノードは実際にはソート順に従ってソートされます。ソート順は、ノードのサブノードごとに 0 から始まり、ルート ノードが 1 つあります。

4

3 に答える 3

2

あなたがしていることが最も効率的な方法だと思います。特に、任意の木を使用している場合。

任意のツリーが与えられ、トラバーサルを開始するノードを見つける必要があります。階層がないため(つまり、バイナリツリーではない)、ノードをスキャンする必要があります(特定のノードがリーフノードである場合、またはノードがツリーにない場合は、ノードの半分以上をスキャンすることになります。開始するノードが見つかるまで、ツリー全体を検索する必要があります)。ノードが見つかったら、DFトラバーサルまたはBFトラバーサルを開始できます。

私はあなたができる最適化を見ていません。

于 2011-10-17T16:41:10.740 に答える