Leetcode を実践するには、いくつかのアルゴリズム テンプレートを知っておく必要があります。今回は、まず二分木の再帰的および非再帰的トラバーサル アルゴリズム テンプレートをまとめます。 バイナリ ツリーをトラバースする方法には、前方トラバース、中間トラバース、後方トラバース、レベル順トラバースの 4 つがあります。バイナリ ツリーのフロント、ミドル、バックの順序のトラバーサルでは、各トラバーサルを再帰的および循環的に実装することができ、各トラバーサルの再帰的実装は循環的実装よりも簡単です。以下に簡単にまとめておきます。私は「Code Thoughts」のハルビン工業大学の先輩の問題解決ガイドに深く感銘を受けました。そのため、以下のコードは「Code Thoughts」から一部引用したものです。 再帰次の疑似コードは、二分木トラバーサルの再帰アルゴリズム テンプレートです。順序は中央、左、右で、前順序トラバーサルです。3 行のコード順序を変更することで、前順序、中央順序、後順序の 3 つの再帰トラバーサルを簡単に解決できます。
これには C++ コードも用意されています。再帰アルゴリズム テンプレートには終了条件を追加する必要があります。そうしないと、再帰に入ると、深海に入るようなものになり、それ以降は、オファーは通行人になります。ソース コードのランダムな考え。
反復バイナリ ツリーの反復トラバーサルは、再帰トラバーサルよりも困難です。実際、スタック データ構造が使用されます。「Code Thoughts」では、マーキングにヌル ポインターを巧みに使用しています。原則として、処理されたノードをスタックに配置し、ヌル ポインターをマークとして配置します。 スタックは先入れ後出しの順序になっているため、事前順序トラバーサルの順序は左と右です。スタックに追加するときは、逆の順序で追加する必要があります。追加する各要素の後に null ポインターを追加します。Python では、代わりに None を使用することもできます。 以下は具体的な疑似コードです。インオーダートラバーサルとポストオーダートラバーサルについては、スタックにノードを追加する順序を変更するだけです。
以下は具体的な C++ コードです。C++ ではスタックにポップした後に戻り値がないので、特に注意が必要です。
階層トラバーサル実際、ツリー トラバーサルには、深さ優先トラバーサルと幅優先トラバーサルの 2 種類があります。ツリーのさまざまな深さ優先トラバーサル (前順序、内順序、後順序トラバーサル) は、再帰的および非再帰的な記述方法です。ツリー内の幅優先トラバーサルは、レベルごとのトラバーサルです。 バイナリ ツリーの階層的トラバーサルでは、トラバーサルを完了するためにキュー データ構造を使用する必要があります。 Pythonの擬似コードでは、
上記の Python 疑似コードを使用して、より効率的な C++ コードを記述します。
上記はツリートラバーサルテンプレートです。実際、これは本質的には深さ優先探索と幅優先探索のアルゴリズム テンプレートです。他の多くの操作はツリー探索操作に基づいています。したがって、すべてのツリー探索方法を習得することは、ツリー問題の半分を解決することと同じです。 |
>>: 暗号化アルゴリズムの革命的な進歩、データ保護の問題を解決するか?
MacでSiriを呼び出したことがありますか?とにかく一度も合格していない。 AIの世界では「ベテラ...
写真は思い出を保存するための最も便利なツールの一つです。テクノロジーのおかげで、ある意味カメラとも言...
[[248236]]皆さんは、イ・セドルと柯潔を破った Google の「Alpha Go」をまだ覚...
「小都小都」、「私はここにいます」 - 数百万の家族と小都の間の日常会話のシーンがCCTVニュースス...
1 月 11 日、OpenAI は小規模なセルフサービス チーム専用の新しいサブスクリプション プラ...
[[378224]]今年から始めます。グラフニューラルネットワークは研究者の間で話題になっており、こ...
絶滅危惧動物を研究する上で最大の課題の一つは、その数を正確に推定することであり、各個体を追跡して詳細...
AI分野におけるモデリング手法として、微分方程式と機械学習がありますが、それぞれの利点は何でしょうか...
Foundry の 2023 年 AI 優先事項調査では、組織内で AI および AIGC テクノ...
Googleのプロモーションビデオは実は偽物だった?昨日Googleが公開したGeminiのプロモ...
過去 2 年間で最もホットな話題は何かと聞かれれば、人工知能は間違いなくそのリストに載るでしょう。金...