記事のディレクトリ
序文
データの論理構造
-
線形構造
- 線形テーブル
- スタック(特殊線形テーブル)
- キュー(特殊線形テーブル)
- 文字列、配列、一般化されたテーブル
-
非線形構造
- 木の構造
- グラフィック構造
この章で紹介するツリー構造は、「1対多」の関係でデータ要素のコレクションを格納する非線形ストレージ構造です。
1.ツリーの定義
木の構造
- ノード間の分岐
- 階層関係がある
図に示すように:
Tree:はn(n> = 0)ノードの有限集合です。
n = 0の場合、それは空のツリーと呼ばれます。
n> 0の場合、次の2つの条件を満たす。
- ルート(ルート)と呼ばれる特定のノードは1つだけです。
- 残りのノードは、m(m> = 0)の互いに素な有限集合T1、T2、T3、...、Tmに分割できます。各集合はそれ自体がツリーであり、ルートのサブツリー(SubTree)と呼ばれます。例:ノードB、E、F、K、およびLで構成されるツリーは、ツリー全体のサブツリーです。
データAの場合、データB、C、およびDに関連し、データBの場合、EおよびFに関連します。これが「1対多」の関係です。
次に、ツリーのノード
ノード:ツリー構造に格納されている各データ要素は「ノード」と呼ばれます。たとえば、図1(A)では、データ要素Aはノードです。
親ノード(親ノード)、子ノード、兄弟ノード:図1(A)のノードA、B、C、Dの場合、AはノードB、C、Dの親ノード(「親ノード」とも呼ばれます)です。 )、およびB、C、およびDは、すべてノードAの子ノード(「子ノード」とも呼ばれます)です。B、C、およびDの場合、それらはすべて同じ親ノードを持っているため、互いに兄弟です。
ツリールートノード(「ルートノード」と呼ばれます):空でないすべてのツリーには、ルートと呼ばれるノードが1つだけあります。図1(A)では、ノードAはツリー全体のルートノードです。
ツリーのルートを判断するための基礎は次のとおりです。ノードに親ノードがない場合、このノードはツリー全体のルートノードになります。
リーフノード:ノードに子ノードがない場合、このノードはリーフノード(リーフノード)と呼ばれます。たとえば、図1(A)では、ノードK、L、F、G、M、I、およびJはすべてこのツリーのリーフノードです。
3つ、サブツリーと空のツリー
サブツリー:図1(A)に示すように、ツリー全体のルートノードはノードAであり、ノードB、E、F、K、Lで構成される部分を見ると、これもツリーであり、ノードBは、このツリーのルートノードです。したがって、ノードB、E、F、K、およびLで構成されるツリーは、ツリー全体のサブツリーと呼ばれます。同様に、ノードE、K、およびLもサブツリーであり、ルートノードはEです。
注:単一ノードもツリーですが、ルートノードはそれ自体です。図1(A)では、ノードK、L、Fなどはすべてツリーであり、それらはすべてツリー全体のサブツリーです。
サブツリーの概念を理解した後、ツリーは次のように定義することもできます。ツリーは、ルートノードといくつかのサブツリーで構成されます。
空のツリー:セット自体が空の場合、形成されたツリーは空のツリーと呼ばれます。空のツリーにはノードがありません。
補足:ツリー構造では、同じルートノードを持つ各サブツリーは互いにオーバーラップできません。たとえば、図1(A)では、ルートノードAに加えて、残りの要素がそれぞれ3つのサブツリーを構成しています。ルートノードはB、C、およびDです。これらの3つのサブツリーには同じノードがありません。存在する場合、それは木の構造を破壊し、木として数えることができません。
第四に、ノードの次数とレベル
ノードの場合、サブツリーの数(ノードにあるブランチの数)は、ノードの次数(次数)と呼ばれます。たとえば、図1(A)では、ルートノードAの下に3つのサブツリーがあるため、ノードAの次数は3です。
ツリーの次数は、ツリー内の各ノードの次数の最大値です。ツリー1(A)が示すように、各ノードの最大値は3であるため、ツリー値の全粒穀物は3です。
ノードレベル:ツリーのルートから開始して、ルートレイヤーが最初のレイヤー、ルートの子ノードが2番目のレイヤーというように続きます。図1(A)の場合、ノードAは第1層にあり、B、C、およびDは第2層にあり、E、F、G、H、I、およびJは第3層にあり、K、L、とMは3層目です。4階建てです。
ツリーの深さ(高さ)は、ツリー内のノードの最大レベルです。図1(A)のツリーの深さは4です。
2つのノードの親ノードが同じではないが、それらの親ノードが同じレベルにある場合、2つのノードは互いにいとこです。たとえば、図1(A)では、ノードGとE、F、H、I、およびJの親ノードはすべて第2層にあるため、それらの間の関係はいとこです。
第四に、順序付けられた木と順序付けられていない木
ツリー内のノードのサブツリーを左から右に見ると、誰が左側に誰が右側にいるかという規制があります。このツリーは順序付きツリーと呼ばれ、それ以外の場合は順序なしツリーと呼ばれます。
順序付けられたツリーでは、ノードの左端のサブツリーは「最初の子」と呼ばれ、右端のサブツリーは「最後の子」と呼ばれます。
図1(A)を例にとると、それが順序付けられたツリー自体である場合、ルートノードとしてノードBを持つサブツリーはツリー全体の最初の子であり、ノードDはルートノードです。の子ツリーは最後です。木全体の子。
五、森
m(m> = 0)の互いに素な木の集合は、フォレストと呼ばれます。図1(A)では、ルートノードとしてB、C、およびDを持つ3つのサブツリーをフォレストと呼ぶことができます。
前述のように、ツリーはルートノードと複数のサブツリーで構成されていると理解でき、これらのサブツリー自体はフォレストであるため、ツリーはルートノードとフォレストで構成されていると理解することもできます。式で表されます:Tree =(root、F)
その中で、rootはツリーのルートノードを表し、Fはm(m> = 0)本のツリーで構成されるフォレストを表します。
6、ツリーの他の表現
図1(A)のツリー表現に加えて、他の表現方法があります。
図2(A)は、ネストされたセットの形式で表されます。
図2(B)は凹型表記を使用しています。
最も一般的に使用される表現方法は、一般化されたテーブルを使用することです。図1(A)は、一般化された表で次のように表されます:
(A、(B(E(K、L)、F)、C(G)、D(H(M)、I、J)))
総括する
ツリータイプのストレージ構造は家系図に似ており、各ノードには父と息子、兄弟、いとこの関係がある場合もあります。このセクションでは、ツリーの基本的な用語に焦点を当てます。抽象C言語中国語のウェブサイトのほとんど。エラーがあればお気軽に訂正してください。