B-Trees
Definition

Figure: B-Tree of height 3 containing minimum number of keys
- Every node (x) has (x.n) keys and (x.n+1) children (possibly undefined).
- The key (x.k_i) separates the range of keys stores in children subtrees, say (l_i) then (l_1\le x.k_1\le l_2\le x.k_2\le \ldots x.k_n \le l_{n+1})
- All leaves have same depth
- Each node except root has (t-1) keys to (2t-1) keys. Therefore (t) to (2t) children.
- Height of tree (h=O(\log_tn))
Operations
Search (O(th)=O(t\log_tn))
- Find the subtree where given key exists using linear search
- recurse in that tree
Create (O(1))
- Create a empty root node
- Insert keys
Insert (O(th)=O(t\log_tn))
- Find the the leaf node by searching.
- If node is full split on median key to make two children nodes and insert the meadian key into parent node.
For single pass, split whenever you come across a full node while searching so as to be assured to no more split any nodes while shifting the median key upwards.
Splitting

Figure: Splitting a node with (t=4)
- Make two nodes with keys less than and more than the median key respectively.
- Move the children between the keys to respective trees.
- Move the median key to parent node.
- Move the children around the median key to the left and right new nodes respectively.
Delete (O(th)=O(t\log_tn))
- If key (k) is in leaf node (x) then delete (k) from (x).
- If key (k) is in internal node (x) then
- If left child (y) of (k) has (\ge t) keys then find predecessor (k’) of (k) in (y). Delete (k’) from (y) and replace (k) by (k’) in (x).
- Otherwise check for right child (z) and do symmetrically.
- Otherwise merge (y) and (z) along with (k) into (y). Recursively delete (k) from (y).