区間 R が入力として与えられたとき、それを点を入力として与えられた場合に還元することができる。まず、始点か終点が R の区間内にある区間を全て探す。1次元の場合、各区間の始点と終点で構成された単純な木構造を使えばよい。このとき、各点には対応する区間へのポインタを付与しておく。
この O(log n) の探索によって、考慮すべき最小と最大の点が明らかとなる。この範囲内の各点には区間が対応していて、それがクエリの区間とオーバーラップしているので、解に加える。ただし、始点も終点も R に含まれる区間も考えられるので、二重に登録しないよう注意が必要である。これを防ぐには、各区間を表すデータ構造にフラグを用意しておいて、解に加えられたときにそのフラグを立てればよい。
以上でまだ考慮されていない区間は、R が完全に含まれてしまうような区間である(始点も終点も R の中にはない)。このような区間を探すには、R 内の任意の点について下記に示す点クエリのアルゴリズムを実施すればよい(ここでも、二重に登録しないよう注意が必要である)。
点
次に点 x が入力として与えられた場合を考える。通常の2分木を走査するのと同様の再帰的アルゴリズムで木構造を走査する。各ノードについて x とそのノードの中央点である x_center を比較する。x が x_center より小さい場合、左側の S_left を調べる。x が x_center よりも大きい場合、右側の S_right を調べる。
根ノードから葉ノードまで、走査していく過程で、それぞれのノードの S_center に含まれる区間群を処理する。x が x_center より小さい場合、S_center にある区間は必ず終点が x より大きい(そうでないと x_center とオーバーラップできない)。したがって、S_center にある区間群のうち x より始点が小さい区間を探せばよい。S_center に対応するデータ構造はすでにあるのでそれを使い、この場合は始点だけを見ればいいので始点でソートされたリストを調べる。始点が x より小さい区間は、必ず x を含んでいる(終点は x_center より大きく、x_center は x より大きいため)。したがって、始点でソートされたリストを先頭から順に見ていき、始点が x より小さいものを出力に加える(始点が x を超えた時点で終了)。
同様に x が x_center より大きい場合、S_center にある区間群は全て始点が x より小さいことがわかっているので、終点でソートされたリストを使って、終点が x より大きい区間を探せばよい。
x が x_center と同一の場合、S_center にある区間群は全て解に含めることができ、しかもそれ以降の木構造の走査をする必要がない。
高次元
区間木はより高次の N 次元に拡張でき、クエリ時間と構築時間は1次元と同じで、メモリ使用量は O(n log n) となる。
まず、N次元の領域探索木を構築し、クエリの領域 R に始点や終点が含まれる全ての区間を効率的に検索できるようにする。そのような領域が明らかになったら、残る問題はクエリの領域を内包する領域を探す方法である。そのようなオーバーラップを探すにはN次元の区間木を構築し、いずれかの座標軸について R と交差するかどうかを調べる。例えば、2次元の場合、X軸についての区間木を構築し、四角形などの領域 R がクエリとして与えられる。そして、同時にY軸についての区間木に対しても同様にクエリを処理する。
次元があがると、それに対応して区間木も余分に必要になる。木構造を走査する際に、オーバーラップを探すために x と S_center の比較を行う。1次元の場合に2つのソートされたリストが使われていた部分に、領域探索木を構築する。これにより、S_center と領域 R のオーバーラップを効率的に検索できるようになる。
Augmented tree
別の手法は、Introduction to Algorithms, Second Edition[1]の 14.3 章(pp.331–317、First Edition は15.3章)に記述がある。
^Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7
Mark de Berg; Marc van Kreveld; Mark Overmars; Otfried Schwarzkopf (2000). “Section 10.1: Interval Trees”. Computational Geometry (Second Revised ed.). Springer-Verlag. pp. 212-217. (centered interval tree). ISBN3642096816. NCIDBA45765321