I’m trying to implement a B-Tree according to the chapter “B-Trees” in “Introduction to Algorithms”.
What I don’t quite get is the “minimal degree”. In the book it is stated that the degree is a number which expresses the lower/upper bound for the number of keys a node can hold. It it further says that:
- Every non-root node stores at least
t - 1keys and hastchildren. - Every node stores at most
2*t - 1keys and has2*tchildren.
So you get for t = 2:
t - 1= 1 keys and t = 2 children2*t - 1= 3 keys and 4 children
For t = 3
t - 1= 2 keys and t = 3 children2*t - 1= 5 keys and 6 children
Now here’s the problem: It seems that the nodes in a B-Tree can only store an odd number of keys when they are full.
Why can’t there be a node with, let’s say at most 4 keys and 5 children? Does it have something to do with splitting the node?
Definitely not. The numbers you have written is minimum and maximum number ofof keys respectively, so for
t = 2, nodes with 1, 2, 3 keys are allowed. Fort = 3, nodes with 2, 3, 4, 5 keys are allowed.Moreover, the root of the tree is allowed to have only 1 key.
It is possible to define (and implement) trees that have eg. 1 or 2 keys in a node (so-called 2-3 trees). The reason B-trees are defined to accommodate one more, is that this leads to faster performance. Particularly, this allows amortized
O(1)(counting splitting and joining operations) delete and insert operations.