An AVL tree is another balanced binary search tree. Named after their inventors, Adelson-Velskii and Landis, they were the first dynamically balanced trees to be proposed. Like red-black trees, they are not perfectly balanced, but pairs of sub-trees differ in height by at most 1, maintaining an O(logn) search time. Addition and deletion operations also take O(logn) time.
Definition of an AVL tree
An AVL tree is a binary search tree which has the following properties: - The sub-trees of every node differ in height by at most one.
- Every sub-tree is an AVL tree.
|  |
| Balance requirement for an AVL tree: the left and right sub-trees differ by at most 1 in height. |
You need to be careful with this definition: it permits some apparently unbalanced trees! For example, here are some trees:
Tree | AVL tree? |
 | Yes Examination shows that each left sub-tree has a height 1 greater than each right sub-tree. |
 | No Sub-tree with root 8 has height 4 and sub-tree with root 18 has height 2 |
Insertion
As with the red-black tree, insertion is somewhat complex and involves a number of cases. Implementations of AVL tree insertion may be found in many textbooks: they rely on adding an extra attribute, the balance factor to each node. This factor indicates whether the tree is left-heavy (the height of the left sub-tree is 1 greater than the right sub-tree), balanced (both sub-trees are the same height) or right-heavy (the height of the right sub-tree is 1 greater than the left sub-tree). If the balance would be destroyed by an insertion, a rotation is performed to correct the balance.
 | A new item has been added to the left subtree of node 1, causing its height to become 2 greater than 2's right sub-tree (shown in green). A right-rotation is performed to correct the imbalance. |
- AVL trees
- Trees which remain balanced - and thus guarantee O(logn) search times - in a dynamic environment. Or more importantly, since any tree can be re-balanced - but at considerable cost - can be re-balanced in O(logn) time.