データ構造の高さ平衡左偏木(HBLT)とは?定義とs値の計算方法を解説
高さ平衡左偏木(HBLT)とは
本記事では、データ構造の一つである高さ平衡左偏木(Height Balanced Leftist Tree:HBLT)について詳しく解説します。
外部ノードと拡張二分木
まず、空の部分木を外部ノード(external node)と呼ばれる特殊なノードで置き換えた二分木を考えてみましょう。外部ノード以外のすべてのノードは内部ノード(internal node)と呼ばれます。このように、既存の二分木に外部ノードを追加して完成させた木を拡張二分木(extended binary tree)といいます。

この木から葉につながる辺を取り除いて考えると、それが元々の二分木に相当し、外部ノードを含めた全体が拡張二分木となります。
s値の定義
次に、s(x) を「ノード x から、その部分木内にある外部ノードまでの最短経路の長さ」と定義します。
- x が外部ノードの場合:s(x) = 0
- x が内部ノードの場合:s(x) = min{s(L), s(R)} + 1
min{𝑠(𝐿), 𝑠(𝑅)} + 1
ここで、L と R はそれぞれノード x の左の子と右の子を表します。以下の図は、実際の木における s 値の計算例です。

HBLT の定義
HBLT の定義は次のとおりです。
ある二分木が高さ平衡左偏木(HBLT)であるのは、すべての内部ノードにおいて、左の子の s 値が右の子の s 値以上であるとき、かつそのときに限る。
先ほど示した木は HBLT ではありません。ノード a の親に注目すると、s(L) = 0、s(R) = 1 となっており、このノードだけが HBLT の条件を満たしていないためです。そこで、このノードの左右の部分木を入れ替えることで、木全体を HBLT に変換できます。

最大木・最小木との関係
HBLT に関連するその他の重要な定義を紹介します。
最大木(max tree)/最小木(min tree):各ノードの値が、その子の値以上(最大木の場合)、または以下(最小木の場合)であるような木を指します。
最大 HBLT:最大木でもある HBLT。最小 HBLT:最小木でもある HBLT を意味します。
これらの構造は、マージ(併合)操作を効率的に実行できるヒープの一種として知られており、優先度付きキューの実装などに幅広く応用されています。
-
BSPツリー(空間分割木)とは?データ構造の基本原理と生成アルゴリズムを徹底解説
BSPツリーの概要 コンピュータサイエンスの分野では、バイナリ空間分割(Binary Space Partitioning:BSP)と呼ばれる手法が用いられています。これは、超平面(ハイパープレーン)を分割面として使用し、空間を再帰的に2つの凸集合へと分割していく方法です。この分割処理を繰り返すことで、領域内のオブジェクトを木構造(ツリー構造)として表現できるようになります。このデータ構造がBSPツリーです。 バイナリ空間分割は、1969年に3Dコンピュータグラフィックスの文脈で考案されました。BSPツリーの構造により、シーン内のオブジェクトに関する空間情報を高速に参照することが可能になりま
-
データ構造の範囲ツリー(レンジツリー)とは?仕組み・kd-treeとの違い・構築方法を解説
範囲ツリー(range tree)は、点の集合を格納するための順序付き木構造として定義されるデータ構造です。最大の特徴は、指定された範囲内に存在するすべての点を効率的に取得できる点にあり、実務では主に2次元以上の空間で実装されます。範囲ツリーはkd-tree(kd木)とよく似た構造を持っていますが、両者には明確なトレードオフがあります。範囲ツリーはクエリ時間が O(logd n + k) とkd-treeより高速である一方、必要な記憶領域は O(n logd-1 n) と大きくなります。ここで、d は空間の次元数、n は木に格納されている点の総数、k は1回のクエリで取得される点の数を表します