データ構造とアルゴリズム分析 - バイナリ ツリー、ツリー、およびフォレスト

二分木、木と森

試験内容

バイナリ ツリー、ツリー、およびフォレストの定義

木:

ツリー (Tree) は n (n>=0) ノードの有限集合であり、空ツリー (n= 0) または空でないツリー T のいずれかです。

  • ルートと呼ばれるノードは 1 つだけです。
  • ルート ノードを除く残りのノードは、相互に素な m (m>0) 個の有限集合 T1 、T2 、... に分割できます。これらはそれぞれ木そのものであり、ルートのサブツリーと呼ばれます

二分木:

バイナリ ツリー (バイナリ ツリー) は、n (n>=0) ノードのコレクションであり、空ツリー (n= 0)、または空でないツリー T の場合は空でないツリーです。

  • ルートと呼ばれるノードは 1 つだけです。

  • ルート ノードを除く残りのノードは、互いに素な 2 つの部分集合 T1 と T2 に分割されます。これらはそれぞれ T の左部分木と右部分木と呼ばれ、T1 と T2 は両方とも二分木です。

バイナリ ツリーとツリーの違い:

  • バイナリ ツリーの各ノードには、最大で 2 つのサブツリーがあります (つまり、バイナリ ツリーには次数が 2 を超えるノードはありません)。
  • 二分木の部分木は左右に分かれており、勝手に順序を逆にすることはできません。

二分木の実装(逐次記憶構造と連鎖記憶構造を含む)、二分木のトラバーサル。

順次ストレージ構造:

チェーン収納構造:

二分木の走査:
  • 事前注文トラバーサル

二分木が空の場合、操作は行われません。それ以外の場合は、
(1) ルート ノードにアクセスします。
(2) 左側の部分木を前の順序で走査します。
(3) 右側の部分木を前の順序で走査します。

  • 順序通りのトラバーサル

バイナリ ツリーが空の場合は、null 操作を実行します。そうでない場合は、
(1) 左側のサブツリーを順番にトラバースします。
(2) ルート ノードを調べます。
(3) 右側のサブツリーを順番にトラバースします。

  • ポスト オーダー トラバーサル

バイナリ ツリーが空の場合、操作はありません。それ以外の場合は、
(1) 左のサブツリーのポスト オーダー トラバーサル、
(2) 右のサブツリーのポスト オーダー トラバーサル、
(3) ルート ノードにアクセスします。

二分探索木、2-3-4木、ハフマンコーディング、ヒープなどの二分木構造下のアプリケーションと拡張

二分探索木
2-3-4 ツリー
ハフマンコーディング

最適ツリーとも呼ばれるハフマン ツリーは、最短の加重パス長を持つツリーです。

ヒープ

バランス二分木の定義、バランスファクターの定義、バランス二分木の回転演算

平衡二分木
バランス係数
二分木の回転のバランスをとる:

木と森の貯蔵構造、木と森の横断、森と二分木の変換。

木と森の貯蔵構造
  • 親表記

この表現方法では、ツリーのノードは連続したストレージ ユニットのグループに格納され、各ノードには、データ フィールド データの他に、
親ノードの位置を示す親フィールドが付加されます。

このストレージ構造は、各ノード (ルートを除く) が 1 つの親しか持たないという特性を利用しています。このストレージ構造の下では、
ノードの親を見つけるのは非常に便利で、ツリーのルートも簡単に見つけることができますが、ノードの子を見つけるには構造全体をトラバースする必要があります。

  • 子供の表現

ツリー内の各ノードには複数のサブツリーがある場合があるため、複数のリンク リストを使用できます。つまり、各ノードには複数のポインター フィールドがあり、各ポインターはサブツリー
のルート ノードを指します。

  • 子弟法

バイナリ ツリー表現、またはバイナリ リンク リスト表現とも呼ばれます。つまり、バイナリ リンク リストはツリー ストレージ構造として使用されます。リンク リスト内のノードの 2 つのチェーン ドメインは、ノードの最初の子ノードと次の兄弟ノードをそれぞれ指し、それぞれ firstchild ドメインと nextsibling ドメインという名前が付けられます。

このストレージ構造の利点は、バイナリ ツリーのバイナリ リンク リスト表現とまったく同じであるため、一般的なツリー構造をバイナリ ツリーに変換して処理することができ、ツリーに対する操作を使用して実現できることです。二分木のアルゴリズム。したがって、子兄弟表現は、一般的に使用されるツリー ストレージ表現方法です。

フォレストからバイナリ ツリーへの変換:
  • フォレストを二分木に変換する

F={T1, T2,..., 数} が森の場合、次の規則に従って二分木 B= (根、LB、RB) に変換できます。
(1) F が空の場合、つまり m= o,' の場合、B は空のツリーです;
(2) F が空でない場合、つまり m"'F-0 の場合、B のルートはルート ROOT(T1 );
B の左部分木 LB は、Wu のルート ノードの部分木フォレスト F{T11, T12, ..., T1m} から変換された二分木であり、その右部分木 RB はフォレストから変換 F'
= {T2, T3 , …,数} 変換された二分木

  • 二分木をフォレストに変換する

B= (root, LB, RB) が二分木である場合、次の規則に従ってフォレスト F={T1, T2, ..., Tm} に変換できます: (1) B が空の場合
、 F は空です;
(2 ) B が空でない場合、F の最初のツリーのルート ROOT(T1) は二分木 B のルートです; T1 のルート ノードのサブツリー > ツリー フォレスト F1 は次から変換されますB Forest の左部分木 LB、F の T1 以外の木からなる森 F'={T2 , T3 , ...} は、B の右部分木 RB を変換した森である。

木と森のトラバーサル

二分木の息子と兄弟の観点から木を表す場合

ツリーのファーストルート トラバーサルとポストルート トラバーサルは、バイナリ ツリーのプレオーダー トラバーサルとインオーダー トラバーサルのアルゴリズムを借用することで実装できます。

ツリーの最初のルート トラバーサル == 二分木の事前順序トラバーサル

ツリーのバック ルート トラバーサル == 二分木のインオーダー トラバーサル

また、抽象データ型の定義と実装を確認してください。

試験要件

バイナリ ツリー、ツリー、およびフォレストの定義と、それらの類似点と相違点を把握する

バイナリ ツリーの 4 つのトラバーサルをマスターし、トラバーサルに依存してバイナリ ツリーの操作を完了できるようにする

二分木の逐次格納構造と連鎖格納構造の違いを理解する

二分木とその拡張による検索技術をマスターする

ハフマンコーディングとヒープの実装と応用をマスターする

平衡二分木の意味を理解する

平衡二分木の回転操作をマスターする

木や森がとれるさまざまな保管方法の違いをつかむ

二分木変換で木と森をマスターする

木と森と二分木の違いと相関関係をトラバーサルで捉える

検索と集合の意味を理解し、検索と集合の基本操作の実現をマスターする

おすすめ

転載: blog.csdn.net/weixin_45976751/article/details/121180139