4

ツリートラバーサルと実装の背後にある考え方は理解していますが、ここで質問があります。なぜそれらすべてが必要なのですか?

今私が知っているのは、数式を解析するときに preorder traversal が使用されることだけです。ウィキペディアから私も読んだ:

  • 順序トラバーサルは、二分探索ツリーで順序トラバーサルを使用するのに特に一般的です。これは、二分探索ツリーを設定したコンパレータに従って、基礎となるセットから順番に値を返すためです (名前の由来)。事前注文トラバーサル
  • 値を新しいツリーに挿入しながらツリーを前の順序でトラバースすることは、二分探索ツリーの完全なコピーを作成する一般的な方法です。プレオーダー トラバーサルを使用して、式ツリーからプレフィックス式 (ポーランド語の表記法) を取得することもできます。つまり、プレオーダー式に式ツリーをトラバースします。(私はすでに述べました)

しかし、これらの例はかなりあいまいです。誰でもこれをもっと詳しく説明できますか。特に例で。

4

2 に答える 2

6

ディレクトリ ツリーで何らかのファイル操作を行う場合の問題を考えてみましょう。操作がファイルの削除である場合、ディレクトリ自体を削除する前に各ディレクトリを空にする必要があるため、ポストオーダー トラバーサルが必要です。対照的に、階層をコピーするときは、最初にディレクトリをコピーする必要があるため、事前順序走査が必要です。

正直なところ、BST の順序通りのトラバーサルについて曖昧な点がわかりません。ユーザー インターフェイスで BST の内容を画面に表示する場合、キーを並べ替えて表示したいと思いませんか。(そうしない場合、BST を使用するのはおそらく悪い考えです。ハッシュ テーブルの方が高速であることが多いためです。)

于 2012-09-30T19:54:08.630 に答える
3

たくさんの例を思いつくことができます。たとえばパフォーマンス。

実生活の木を想像してみてください。幹があり、幹には3つの枝があります。これらの内部ブランチには、それぞれ 3 つの外部ブランチがあります。したがって、9 つの外側の枝があります。

3 つの内側のブランチの 1 つが死んでおり、続いて外側の 3 つのブランチも死んでいます。

ここで、すべての枯れ枝を切り取りたいと考えています。この木には 13 本の枝があります (1 本の幹、3 本の内側、9 本の外側)。それらをカットするかどうかを決定するために、それらすべてを個別に確認する必要がありますか? いいえ

ここで、すべての枯れ枝を切り取りたいロボットがいると想像してください。ソフトウェアふすまの中で、それは茎を見ます..死んでいますか?いいえ。次に、最初の内部ブランチを調べますが、それは死んでいますか? はい!それからその枝を切り落とすと同時に、その外側の枝も切り落とされます。

13 の選択をする代わりに、10 を選択するだけで済みます (幹、2 つの健康な内側の枝、それらの 6 つの外側の枝、および病気の内側の枝)。

于 2012-10-02T12:02:12.290 に答える