データ構造の基礎知識:根なし二分木(アンルーテッド・バイナリツリー)とは?
本記事では、データ構造の一種である根なし二分木(unrooted binary tree)について解説します。根なし二分木は、閉路(サイクル)を持たない連結な無向グラフとして定義される木構造です。
根なし二分木の基本概念
根なし二分木には「根」となる特定の頂点が存在せず、すべての頂点が対等な立場で扱われる点が大きな特徴です。この木構造における各要素は、以下のように分類されます。
- 葉(リーフ):隣接する頂点(近傍ノード)を1つだけ持つ頂点
- 内部ノード:葉以外の残りのすべての頂点
また、頂点の次数(degree)とは、その頂点に隣接する頂点の数を指します。2つ以上のノードを持つ木において、葉は次数1の頂点と定義されます。
フリーツリー(自由木)との関係
フリーツリー(free tree)は根なし二分木の一種であり、すべての内部ノードがちょうど次数3を持つという性質を持ちます。つまり、各内部ノードは必ず3つの隣接頂点と結ばれているため、全体として均整の取れた構造になります。
コンピュータサイエンスにおける位置づけ
コンピュータサイエンスの分野では、二分木はデータ構造として扱われる際、根付き(rooted)かつ順序付き(ordered)の形式で用いられることが一般的です。例えば、二分探索木やヒープなどがその代表例です。
しかしながら、根なし二分木にも重要な応用分野があります。特に以下の2つの領域において、その有用性が高く評価されています。
- 階層的クラスタリング(hierarchical clustering):データ間の類似度に基づいて、クラスタを段階的に統合・分割していく分析手法。根なし二分木はクラスタ間の関係を柔軟に表現できます。
- 系統樹の再構成(evolutionary tree reconstruction):生物種や遺伝子の進化の過程を推定する際に用いられる手法。進化の方向性が不確実な場合、根を設けない木構造が適しています。
このように、根なし二分木は一見シンプルな構造ながら、機械学習やバイオインフォマティクスなど、幅広い分野で活用されている重要なデータ構造です。
-
データ構造:仮想木におけるスプレー操作のアルゴリズム
仮想木(Virtual Tree)では、一部の辺は実線(solid)として扱われ、その他の辺は破線(dashed)として扱われます。通常のスプレー操作は、実線で構成される木(solid tree)の内部でのみ実行されます。仮想木内のノード y でスプレーを行うには、以下に示す手法が用いられます。 このアルゴリズムは、木を3回走査し(各パスで1回ずつ)、その都度木を書き換えていきます。第1パスでは、ノード y から開始して実線の木内でのみスプレーを行うことで、y から木全体の根までの経路が破線に変わります。続いて、スプライシング(splicing)によってこの経路を実線に変換します。最後にノード
-
データ構造における二分木の表現方法|配列と連結リストの違いを解説
コンピュータメモリ上での二分木の表現方法 ここでは、二分木をコンピュータのメモリ上でどのように表現するかについて解説します。表現方法には主に2種類あり、配列を使う方法と連結リスト(リンクリスト)を使う方法があります。 配列による表現 まず、次のような二分木を例に考えてみましょう。 配列による表現では、木の要素をレベル順(幅優先順)に走査しながら格納していきます。つまり、ノードを上のレベルから順番に保存する方式です。存在しない要素がある場合は、その位置を空白のまま残します。上記の木を配列で表現すると、次のようになります。 123456789101112131415 10516-81520