Binary Tree (2分木)
バイナリツリーとは
- ツリー構造で、すべてのノードの持つ子が最大でも2つ。
- ひとつのノードがあり、親をもたない (ルートノード)
- ルートノードを除く全てのノードは親を必ずひとつ持つ。
- ノード間の親子関係は循環しない。
用語
-
leaf - 末端のノード
- depth (深さ)
- ルートノードからの距離。 ルートノードは深さ 0.
- バランス木では、全ての葉はほぼ同じ深さとなる。
- たとえば 1023 のノードからなるツリーの葉はすべて深さ9.
- height (高さ)
- 木の中の葉の深さのうち、最大のもの。
走査
- Preorder traversal
- ルートノードが最初に走査される。そして左の木、右の木という順で走査される。
- Postorder traversal
- 左の木が最初に走査され。次に右の木が走査され、最後にルートノードが走査される。
- Inorder traversal
- 左の木が先に走査され、次にルートノードが走査され、最後に右の木が走査される。
バイナリソートツリー Binary Sort Tree
- バイナリツリー。
- ノードの左にはノードよりも小さい値が、右にはノードと同じかそれ以上の値が入る。
少数の要素であれば Linked List でも序列を保ったまま操作可能だが、 要素が多くなると非効率になる。 リストに要素を追加した後でその位置を調べる場合、平均でリスト内の半分の要素を調べることになる。
ソートされた配列であればバイナリサーチを使うことができて効率的だが、新しい要素を追加する際には要素の移動を伴うため非効率である。 平均では新しい要素を追加する際に、既存の要素の半分を移動させる必要がある。
バイナリツリーは探索と挿入を効率的にできる構造として使われ、そのようなバイナリツリーを特にバイナリソートツリー(Binary Sort Tree, Binary Search Tree, 2分探索木)という。
- 左の木にはそのノード以下の値が入る。
- 右の木にはそのノード以上の値が入る。