二分木の事前および事後順序走査の有用性


13

これは非常に単純かもしれませんが、すべてのトラバーサルタイプのバイナリツリー(プレーン、ソート、バランス)のコンテキストだと思いました。

  • 深さ優先予約
  • 深さ優先順
  • 深さ優先順
  • 幅優先

事前注文と事後注文の実際の有用性は何ですか?つまり、事前順序および/または事後順序のトラバーサルが他の2つよりも(いくつかの)利点をもたらすバイナリツリーのタイプおよび/または構成がありますか?

AFAICS、特定のタイプとバイナリツリーの構成があります。これらに対して、順序と幅優先が特定の利点をもたらす可能性があります。

  • バランスの取れたバイナリツリーの場合、深さ優先のトラバースは幅優先と比較して使用するメモリストレージスペースが少なくなります(たとえば、6または7ノードのバランスの取れたバイナリツリーでは、高さが2であるため、深さ優先のトラバーサルは最大で任意の時点で2つのノード、最後のレベルには3つまたは4つのノードがあるため、幅優先スキャンでは、ある時点で最大3つまたは4つのノードを格納する必要があります。この場合、インオーダートラバーサルを使用すると、メモリの使用量が最小になり、ノードを自然な順序で訪問します。

  • バランスの取れていない二分木の場合、最悪の挿入シナリオに近い場合、幅優先で走査すると、深さ優先の走査に比べて使用するメモリが少なくなります。したがって、この場合、幅優先の方が有利です。順序通りのトラバーサルには、値を自然な順序で訪問するという利点があります。

ただし、トラバース前後が他の2つよりも有利になる状況は考えられません。

回答:


13

データ構造とファイルや言語などのシリアル表現との間の変換など、ツリーを使用してさまざまなことを行う必要があります。

したがって、たとえば、次のような解析ツリーがあるとします。

    *
   / \
  +   \
 / \   \
A   B   C

* + A B C接頭辞順でA B + C *歩くか、接尾辞順で歩くかのようにシリアル化できます。言語プロセッサを使用する場合、そのようなことは第二の性質である必要があります。


非常に良い例です!また、in-order-traversalがどのように生成されるかに注意してくださいA + B * C。これは、通常のユーザーにとっては、接尾辞のいずれかのプレフィックスよりも理解しやすいです。
キリアンフォス

3
@KilianFothそれ以外は、ツリーが言うことではありません-少なくとも私の目には、(A + B)* Cと言います。HP-28sの指はAB + C *バージョンを好んでいますが。:-)
sdg

@Kilian:sdgは正しい。順序付けでは、すべてを括弧で囲む場合を除き、優先順位を考慮する必要があります。
マイクダンラベイ

13

Wikipediaの記事は、あなたが深さ優先探索の異なるタイプを使用したいときの素敵な簡潔な説明があります。

  • ノードと値の複製中の事前順序走査により、バイナリツリーの完全な複製を作成できます。また、式ツリーから接頭辞式(ポーランド表記法)を作成するために使用できます。式ツリーを事前にトラバースします。
  • 順序探索は、バイナリ検索ツリーを設定するコンパレータ(名前の由来)に従って、基になるセットから値を順番に返すため、バイナリ検索ツリーで非常に一般的に使用されます。
  • ノードと値を削除または解放する際の後順走査により、バイナリツリー全体を削除または解放できます。また、バイナリツリーの接尾辞表現を生成することもできます。

要するに、アルゴリズムのロジスティック上のニーズです。たとえば、削除中にポストオーダートラバーサルを使用しないと、子ツリーを削除するために必要な参照が失われます。


2019年11月10日のWikipediaが変更され、最初の説明もPost-Orderに属しているため、混乱を招きます。それが私がここにたどり着き、別の情報源を探している理由です。
whoan

5

バイナリツリーを処理するために異なるアルゴリズムを使用することのポイントは、ツリーを処理することではありません。この抽象レベルでは、プロシージャから抽象シンボルのみを取得するため、1つの順序は他の順序とほぼ同じです。

しかし、ツリーは通常、興味深いものを表すために使用され、結果に大きな違いをもたらす可能性があります。例えば、ノードだけでなく、最初の処理最初の対を下降すると、結果が見つかったためれている、それも決定することができ決定し、大きなドメイン(多分無限のドメイン)を介して完全な検索では、検索状態を表す場合、あなたが今までにするかどうか解決策を見つける。ポイントは無限ドメインの場合に最もわかりやすくなります。注意して下降すると、間違った方向に進んだためにツリーの上位にあるソリューションを見落とす可能性があります。しかし実際には、メモリとディスクも有限であるため、これは真に無限ではなく単に非常に大きいドメインにも適用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.