Pre-orderトラバーサルとDFSは、リーフノードまで深さ方向にトラバースする両方の場合と同じように思えます。私が間違っている場合、誰でも私を修正してもらえますか?
前もって感謝します!
ありません。先行予約では、厳密に左ノードを訪問し、次に右ノードを訪問します。ただし、DFSの場合は厳密な方法がないため、どちらでもかまいません。したがって、スタックにプッシュした内容に基づいて複数のトラバーサルが存在します。
おそらく深さ優先アルゴリズムの定義と実装に依存します。 Java SwingのJTreeコンポーネントのDefaultMutableTreeNode
クラスには、ツリートラバーサルに使用される以下の列挙メソッドがあります。
Java Swingの実装では、depthFirstEnumeration
はpostOrderEnumeration
と同じです。私のテストと 公式ドキュメント はこれを確認します。
他のユーザーは、深さ優先の意味を異なる方法で定義できます。たとえば、 Wikipedia の記事では、先行予約と後続注文のトラバースは深さ優先のトラバースの特定のタイプであると述べています。これは、深さ優先走査が具体的な走査アルゴリズムではないことを意味します。
直感的には、ほとんどの実装で再帰を使用する(つまり、暗黙的なスタックデータ構造を使用する)DFSアルゴリズムを適用する方法により、同じように感じます。ほとんどの場合(またはすべて)、結果は予約注文の場合と同じです。
DFSはブランチを選択し、その中に深く入り込むという考え方で、完全に探索します。一方、ブランチを選択する方法およびダウンする方法は、DFSの種類を実装することによって決まります。完了のために、BFSアルゴリズムでは、レベルごとにトラバースします。
事前注文は単なるDFSの一種であることに注意してください。以下に示す他のメソッドもあります。
画像ソース: Base CS