メインコンテンツまでスキップ

木構造

木構造とは

グラフ構造の中でも特に閉路を持たない連結なグラフを木構造と呼ぶ。

閉路を持たないとは、どういうことを指しているかというと

同じ頂点を通らずに始点と終点が同じになることはない

ということである。

イメージ図

連結であるとは全ての頂点が繋がっていることをいう。

イメージ図

つまり、閉路を持たない連結なグラフとは次のような状態である。

イメージ図

木構造には平衡 2 分探索木・AVL 木・トライ木・3 文探索木・赤黒木・スキュー木・スプレー木・B +木・パトリシア木などが存在する。

用語

開始となる頂点(ノード)をと呼び、根と繋がっている辺のことをと言い、根と枝で繋がっている頂点を子ノードと呼ぶ。また、根が存在する木のことを根付き木と呼ぶ。

イメージ図

根から枝を通った個数をその頂点の深さと呼び、同じ根に属しているかつ同じ深さの頂点同士を兄弟ノードと呼ぶ。枝で接続しているかつ深さが-1である頂点を親ノードと呼ぶ。

イメージ図

根付き木において最大の深さにある頂点のことを葉(リーフ)と呼び、子ノードが存在するノードを根と見ることができ、この見方をした根付き木のことを部分木と呼ぶ。

イメージ図

木構造の条件である閉路を持たない連結なグラフ連結なを取り除いた閉路を持たないグラフのことをと呼ぶ。

イメージ図

プログラム

グラフ構造の特別な条件が木構造となる。 そのため、グラフ構造と全く作成するプログラムは同じになる。

box = [[1,5],[1,3],[1,4],[4,6],[6,2]]
graph = [[] for _ in range(6)]
for i in range(len(box)):
graph[box[i][0]-1].append(box[i][1]-1)
graph[box[i][1]-1].append(box[i][0]-1)