Named after Adelson, Velskii, and Landis.
Trees of height O(log n) are said to be balanced. AVL trees consist of a special case in which the subtrees of each node differ by at most 1 in their height.
Balanced trees can be used to search, insert, and delete arbitrary keys in O(log n) time. In contrast, height-biased leftist trees rely on non-balanced trees to speed-up insertions and deletions in priority queues.
Claim: AVL trees are balanced.
Proof. Let N_{h} denote the number of nodes in an AVL tree of depth h
N_{h} | > N_{h-1} + N_{h-2} + 1 |
> 2N_{h-2} + 1 | |
> 1 + 2(1 + 2N_{h-4}) | |
= 1 + 2 + 2^{2}N_{ h-4} | |
> 1 + 2 + 2^{2} + 2^{3}N_{ h-6} | |
... | |
> 1 + 2 + 2^{2} + 2^{3} + ... + 2^{h/2} | |
= 2^{h/2} - 1 | |
2^{h/2} - 1 | < n |
h/2 | < log _{2}(n + 1) |
h | < 2 log _{2}(n + 1) |
LL | ||
RR | ||
LR | ||
RL | ||
LL & LR LL |
Insertions and deletions are performed as in binary search trees, and followed by rotations to correct imbalances in the outcome trees. In the case of insertions, one rotation is sufficient. In the case of deletions, O(log n) rotations at most are needed from the first point of discrepancy going up toward the root.
Delete 4 | |
Imbalance at ‘3’ implies a LL rotation with ‘2’ | |
Imbalance at ‘5’ implies a RR rotation with ‘8’. |