web-dev-qa-db-ja.com

バイナリツリーでの事前順序走査は深さ優先検索と同じですか?

Pre-orderトラバーサルとDFSは、リーフノードまで深さ方向にトラバースする両方の場合と同じように思えます。私が間違っている場合、誰でも私を修正してもらえますか?

前もって感謝します!

23

事前注文はDFSの一種です。

深さ優先走査には、先行順序、順序どおり、および順序後の3つのタイプがあります。

詳細については、 こちら をご覧ください。

49
herohuyongtao

ありません。先行予約では、厳密に左ノードを訪問し、次に右ノードを訪問します。ただし、DFSの場合は厳密な方法がないため、どちらでもかまいません。したがって、スタックにプッシュした内容に基づいて複数のトラバーサルが存在します。

5
lU5er

おそらく深さ優先アルゴリズムの定義と実装に依存します。 Java SwingのJTreeコンポーネントのDefaultMutableTreeNodeクラスには、ツリートラバーサルに使用される以下の列挙メソッドがあります。

  • depthFirstEnumeration()
  • postorderEnumeration()
  • preorderEnumeration()
  • breadthFirstEnumeration()

Java Swingの実装では、depthFirstEnumerationpostOrderEnumerationと同じです。私のテストと 公式ドキュメント はこれを確認します。

他のユーザーは、深さ優先の意味を異なる方法で定義できます。たとえば、 Wikipedia の記事では、先行予約と後続注文のトラバースは深さ優先のトラバースの特定のタイプであると述べています。これは、深さ優先走査が具体的な走査アルゴリズムではないことを意味します。

5
Jan Bodnar

直感的には、ほとんどの実装で再帰を使用する(つまり、暗黙的なスタックデータ構造を使用する)DFSアルゴリズムを適用する方法により、同じように感じます。ほとんどの場合(またはすべて)、結果は予約注文の場合と同じです。

DFSはブランチを選択し、その中に深く入り込むという考え方で、完全に探索します。一方、ブランチを選択する方法およびダウンする方法は、DFSの種類を実装することによって決まります。完了のために、BFSアルゴリズムでは、レベルごとにトラバースします

事前注文は単なるDFSの一種であることに注意してください。以下に示す他のメソッドもあります。

notes on dfs

画像ソース: Base CS

よりよく理解するには、 this blog または this one を参照してください。

0
Amitrajit Bose