Leetcode を実践するには、いくつかのアルゴリズム テンプレートを知っておく必要があります。今回は、まず二分木の再帰的および非再帰的トラバーサル アルゴリズム テンプレートをまとめます。 バイナリ ツリーをトラバースする方法には、前方トラバース、中間トラバース、後方トラバース、レベル順トラバースの 4 つがあります。バイナリ ツリーのフロント、ミドル、バックの順序のトラバーサルでは、各トラバーサルを再帰的および循環的に実装することができ、各トラバーサルの再帰的実装は循環的実装よりも簡単です。以下に簡単にまとめておきます。私は「Code Thoughts」のハルビン工業大学の先輩の問題解決ガイドに深く感銘を受けました。そのため、以下のコードは「Code Thoughts」から一部引用したものです。 再帰次の疑似コードは、二分木トラバーサルの再帰アルゴリズム テンプレートです。順序は中央、左、右で、前順序トラバーサルです。3 行のコード順序を変更することで、前順序、中央順序、後順序の 3 つの再帰トラバーサルを簡単に解決できます。
これには C++ コードも用意されています。再帰アルゴリズム テンプレートには終了条件を追加する必要があります。そうしないと、再帰に入ると、深海に入るようなものになり、それ以降は、オファーは通行人になります。ソース コードのランダムな考え。
反復バイナリ ツリーの反復トラバーサルは、再帰トラバーサルよりも困難です。実際、スタック データ構造が使用されます。「Code Thoughts」では、マーキングにヌル ポインターを巧みに使用しています。原則として、処理されたノードをスタックに配置し、ヌル ポインターをマークとして配置します。 スタックは先入れ後出しの順序になっているため、事前順序トラバーサルの順序は左と右です。スタックに追加するときは、逆の順序で追加する必要があります。追加する各要素の後に null ポインターを追加します。Python では、代わりに None を使用することもできます。 以下は具体的な疑似コードです。インオーダートラバーサルとポストオーダートラバーサルについては、スタックにノードを追加する順序を変更するだけです。
以下は具体的な C++ コードです。C++ ではスタックにポップした後に戻り値がないので、特に注意が必要です。
階層トラバーサル実際、ツリー トラバーサルには、深さ優先トラバーサルと幅優先トラバーサルの 2 種類があります。ツリーのさまざまな深さ優先トラバーサル (前順序、内順序、後順序トラバーサル) は、再帰的および非再帰的な記述方法です。ツリー内の幅優先トラバーサルは、レベルごとのトラバーサルです。 バイナリ ツリーの階層的トラバーサルでは、トラバーサルを完了するためにキュー データ構造を使用する必要があります。 Pythonの擬似コードでは、
上記の Python 疑似コードを使用して、より効率的な C++ コードを記述します。
上記はツリートラバーサルテンプレートです。実際、これは本質的には深さ優先探索と幅優先探索のアルゴリズム テンプレートです。他の多くの操作はツリー探索操作に基づいています。したがって、すべてのツリー探索方法を習得することは、ツリー問題の半分を解決することと同じです。 |
>>: 暗号化アルゴリズムの革命的な進歩、データ保護の問題を解決するか?
「人間がテクノロジーを生み出すペースは加速しており、テクノロジーの力は指数関数的に成長しています。指...
[[348166]]導入2020年は世界にとって激動の年です。経済状況は流行病の影響を受けており、不...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
2021年11月30日、自然界に再び時間結晶が出現しました。タイムクリスタルは不思議な物質です。理論...
エネルギー部門は、現代経済において最も強力かつ収益性の高い部門の 1 つです。しかし、ほとんどのエネ...
任意のポーズの写真を入力し、写真の人物に「指定された動画」の動きを真似してもらうのは簡単ではありませ...
ビッグデータと AI は公平に比較できるでしょうか? ある程度は公平ですが、まずはその違いを明確...
データを機械学習モデルに渡すときには、データを正規化する必要があることはわかっています。データの正規...
見て!今、あなたの前で踊っているのは 4 人の若い女性です。ショート動画プラットフォームで何人かのキ...
[[429514]]ベアリングポイントは、IT リーダーが今後 1 年間にどのテクノロジー分野に重点...