序文 今回レビューする内容は、データ構造トピックの「ツリー」です。ツリーなどのデータ構造を見ると頭が痛くなる、理解しにくいという方は、この記事が参考になるかもしれません。 諺にあるように、何かを把握して理解したいのであれば、まずその概念や特性などを理解しなければなりません。 紹介ツリーは以下の点を中心に開発されています👇 木の基本概念
マインドマップ 👇 木の基本概念 ツリーは、ツリーのような構造を持つデータ セットをシミュレートするために使用されます。あるいは、これを「抽象データ構造」、つまりこの抽象データ型を実装し、ツリーのような構造プロパティを持つデータ セットをシミュレートするために使用されるデータ構造と考えることもできます。 Wikipedia の定義によれば、次のように理解できるようです。 これは、n (n>0) 個の有限ノードで構成される階層セットです。根が上を向き、葉が下を向いている逆さまの木のように見えることから「木」と呼ばれています。以下の機能があります:
このとき、写真を取り出して見る必要があります👇 図から、上記の5つの特徴がよくまとめられます。
木についての知識が少し得られたので、次は木に関する用語をいくつか理解する必要があります。 基本用語 基本的なツリー用語 より正式な要約については、Wikipedia の説明をご覧ください。
上記の図を組み合わせることで、これらの概念を理解することができます。 2 つを組み合わせることで、ツリーをより深く理解できるようになります。 上記の基本的な概念といくつかの専門用語を使用して、木を分類し、どのような種類の木があるのかを確認する必要があります。 木の種類 木の概念と基本的な用語を理解したので、次に木の種類について詳しく説明します。 分類の基準としてWikipediaを使うことができます👇
ツリーの分類が非常に多いため、それらを 1 つずつ習得する必要がありますか? 個人的には、最も単純で最も広く使用されているツリーの種類でもあるバイナリ ツリーの構造を習得すれば十分だと思います。 次に、バイナリツリーを紹介します。 二分木の概念 バイナリツリーは典型的なツリー構造です。名前が示すように、バイナリ ツリーは、各ノードに最大 2 つのサブツリー (通常は「左サブツリー」と「右サブツリー」と呼ばれます) が含まれるツリー構造です。 バイナリツリー この図の内容から判断すると、バイナリツリーの構造が明確に示されているはずです。 二分木の性質については、補足知識として下の図を参考にしてください。個人的には、ここがポイントではないと思います。 二分木の特性 重要なのは、そのトラバーサル方法を習得する必要があるということです。 二分木の走査 バイナリ ツリーをトラバースする一般的な方法は次の 3 つであることがわかっています。
どのようなトラバーサル手法でも、非再帰バージョンだけでなく、基本的なアルゴリズム スキルをテストする再帰バージョンも習得する必要があります。次に、再帰バージョンについて見てみましょう。 事前順序トラバーサル バイナリツリーの事前順序走査を練習するにはここをクリックしてください バイナリ ツリーのルート ノードが指定されると、そのノード値の「事前順序」トラバーサルが返されます。 偽のデータを模擬するとします👇
次に、事前順序探索の理解に基づいて、問題を解決するための疑似コードを書くことができます👇
非再帰バージョン 👇 非再帰の場合、ノードを格納するためのデータ構造を使用する必要があります。使用する必要があるのはスタックです。そのアイデアは参考になります👇
順序通りの走査 バイナリ ツリーが与えられた場合、その順序どおりのトラバーサルを返します。 例:
上級: 再帰アルゴリズムは単純ですが、反復アルゴリズムで実行できますか? 再帰バージョン 👇
非再帰バージョンについてはここでは説明しません。これは、事前順序トラバーサルと同じ考え方で、スタックを使用してノード情報を維持します。
その後のトラバース バイナリ ツリーが与えられた場合、その後順トラバーサルを返します。 例:
上級: 再帰アルゴリズムは単純ですが、反復アルゴリズムで実行できますか? 出典: LeetCode リンク: https://leetcode-cn.com/problems/binary-tree-postorder-traversal 著作権は LeetCode Network に帰属します。商用目的での複製については、正式な許可を得るためにお問い合わせください。非商用目的での複製については、出典を明記してください。 再帰バージョン 👇
非再帰バージョン 👇 実は、最初の2つをやると、ルーチンがあることがわかりますよ〜
バイナリツリーのレベルトラバーサル ⭐⭐ リンク: 二分木のレベル順走査 バイナリツリーが与えられた場合、「レベル順トラバーサル」によって取得されたノード値を返します。 (つまり、すべてのノードを左から右へ、レイヤーごとに訪問します)。 例: バイナリツリー: [3,9,20,null,null,15,7],
レベルトラバーサルの結果を返します:
出典: LeetCode リンク: https://leetcode-cn.com/problems/binary-tree-level-order-traversal 著作権は LeetCode Network に帰属します。商用目的での複製については、正式な許可を得るためにお問い合わせください。非商用目的での複製については、出典を明記してください。 再帰バージョン 👇
非再帰バージョン 👇 ここで使用されるのは、キュー データ構造と先入れ先出しメカニズムです。
トピックの概要 前にも言ったように、すべての問題を解けない場合は、残りの部分は LeetCode の練習に頼ることができます。また、一般的なバイナリ ツリーの問題セットもいくつか用意しました。問題の質は依然として良好です👇
|
<<: 人工知能と機械学習: フィンテック業界の新たな青写真
>>: 科学技術の力を感じる: 人工知能とスマートヘルスケアの 4 つの注目のアプリケーションの分析
どのような知識が私たちを賢くするのでしょうか?私たちが世界を理解し、新しい経験を解釈し、思慮深い選択...
[[247070]]液体ロボットといえば、誰もが真っ先に思い浮かべるのは映画「ターミネーター」のT1...
[[275226]]コールドスタンバイとホットスタンバイコールドスタンバイとは、通常は稼働していな...
2020年は紆余曲折の多い年であり、ドローン開発にとっては革新と変化の年です。今年、我が国のドロー...
GPT-4 コードインタープリターをベンチマークし、CUHK の最新の研究では「大きな動き」が発表さ...
/* 世界を変えるために生きるここでは、あらゆる作品が市場に参入するための種となる可能性があります...
[[256693]]中国工業情報化部傘下の中国情報通信研究院によると、2018年上半期の世界の人工知...
大規模言語モデル (LLM) は、複数の連鎖生成呼び出し、高度なプロンプト技術、制御フロー、および外...
世界の建設業界の現状人口ボーナスの消滅により、中国の建設業界は人件費への大きな圧力に直面しているほか...
大規模モデルの背後にある科学をより深く理解し、その安全性を確保するためには、解釈可能性がますます重要...
人工知能(AI)は60年前の1956年の夏に誕生しました。今日の科学技術の発展により、人工知能は人間...