配列・線形リスト・スタック・キューなどと異なり,非線形なデータ構造のひとつ.木構造のうち,ノードが0個,1個,2個のいずれかの子を持っているものを二分木という.あるノードが3つ以上子を持っている場合,それは二分木とは呼ばない.
二分木はコンパイラや,集合(Set)の操作をO(log n)で行う二分探索木(BST),ハフマン符号化(データ圧縮に用いられる)などに応用されている.
各ノードが2つの子を持つか,子を持たないかのいずれかになっている木
各ノードがすべて2つの子を持ち,すべての葉が同じレベルにある木
全ての葉がhまたはh-1の深さを持ち、全ての葉をできるだけ左に寄せた木
- 木に要素を加える
- 木から要素を取り除く
- 木の要素を探索する
- 木を横断する
各ノードは次図のように,要素と左右の子ノードへのリンクを持つ.
class BinaryTree {
class Node {
int data;
Node left;
Node right;
}
}