二分木、木と森
試験内容
バイナリ ツリー、ツリー、およびフォレストの定義
木:
ツリー (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 を変換した森である。
木と森のトラバーサル
二分木の息子と兄弟の観点から木を表す場合
ツリーのファーストルート トラバーサルとポストルート トラバーサルは、バイナリ ツリーのプレオーダー トラバーサルとインオーダー トラバーサルのアルゴリズムを借用することで実装できます。
ツリーの最初のルート トラバーサル == 二分木の事前順序トラバーサル
ツリーのバック ルート トラバーサル == 二分木のインオーダー トラバーサル