AVL Tree
• binary tree
• for every node x, define its balance factor
balance factor of x = height of left subtree of x
– height of right subtree of x
• balance factor of every node x is – 1, 0, or 1
Balance Factors
-1
1 1
0 1 -1
0
0
0 0 -1 0
This is an AVL tree.
Height Of An AVL Tree
The height of an AVL tree that has n nodes is at
most 1.44 log2 (n+2).
The height of every n node binary tree is at least
log2 (n+1).
log2 (n+1) <= height <= 1.44 log2 (n+2)
Proof Of Upper Bound On Height
• Let Nh = min # of nodes in an AVL tree
whose height is h.
• N0 = 0.
• N1 = 1.
Nh , h > 1
L R
• Both L and R are AVL trees.
• The height of one is h-1.
• The height of the other is h-2.
• The subtree whose height is h-1 has Nh-1 nodes.
• The subtree whose height is h-2 has Nh-2 nodes.
• So, Nh = Nh-1 + Nh-2 + 1.
Fibonacci Numbers
• F0 = 0, F1 = 1.
• Fi = Fi-1 + Fi-2 , i > 1.
• N0 = 0, N1 = 1.
• Nh = Nh-1 + Nh-2 + 1, i > 1.
• Nh = Fh+2 – 1.
• Fi ~ i/sqrt(5).
sqrt
• height <= 1.44 log2 (n+2) follows
Complexity Of Dictionary Operations
get(), put() and remove()
Data Structure Worst Case Expected
Hash Table O(n)/O(log n) O(1)
Binary Search O(n) O(log n)
Tree
Balanced O(log n) O(log n)
Binary Search
Tree
n is number of elements in dictionary
Example AVL Tree
-1
10
1 1
7 40
0 1 -1
0 45
3 8 30
0
0 0 -1 0 60
35
1 5 20
0
25
put(9)
-1
10
0 1 1
7 40
0 1 -1
0 -1 45
3 8 30
0
0 0 0 -1 0 60
35
1 5 9 20
0
25
put(29)
-1
10
1 1
7 40
0 1 -1
0 45
3 8 30
0
0 0 -2 -1 35
0 60
1 5 20
0 -1
RR imbalance => new node is in 25
right subtree of right subtree of 0
29
white node (node with bf = –2)
put(29)
-1
10
1 1
7 40
0 1 -1
0 45
3 8 30
0
0 0 0 0 60
35
1 5 25
0 0
20 29
RR rotation.
Insert/Put
• Following insert/put, retrace path towards root
and adjust balance factors as needed.
• Stop when you reach a node whose balance
factor becomes 0, 2, or –2, or when you reach
the root.
• The new tree is not an AVL tree only if you
reach a node whose balance factor is either 2 or
–2.
• In this case, we say the tree has become
unbalanced.
A-Node
• Let A be the nearest ancestor of the newly
inserted node whose balance factor
becomes +2 or –2 following the insert.
• Balance factor of nodes between new node
and A is 0 before insertion.
Balance Factors Between New
Node and A Are 0
-1
10
1 1
7 40
0 1 -1
0 45
3 8 30
0
0 0 -1 0 60
35
1 5 20
0
25
Insert 6
Imbalance Types
• RR … newly inserted node is in the right
subtree of the right subtree of A.
• LL … left subtree of left subtree of A.
• RL… left subtree of right subtree of A.
• LR… right subtree of left subtree of A.
LL Rotation
A 1 A 2 B 0
B 0 AR B 1 AR B’L 0 A
h h h+1
BL BR B’L BR BR AR
h h h+1 h h h
Before insertion. After insertion. After rotation.
• Subtree height is unchanged.
• No further adjustments to be done.
LR Rotation (case 1)
A 1 A 2 C 0
B 0 B -1 B 0 0 A
C 0
Before insertion. After insertion. After rotation.
• Subtree height is unchanged.
• No further adjustments to be done.
LR Rotation (case 2)
A 1 A 2 C 0
B 0 AR B -1 AR 0 B -1 A
h h
BL 0 BL 1 C BL C’L CR AR
C
h h h h h-1 h
CL CR C’L CR
h-1 h-1 h h-1
• Subtree height is unchanged.
• No further adjustments to be done.
LR Rotation (case 3)
A 1 A 2 C 0
B 0 AR B -1 AR 1 B 0 A
h h
BL 0 BL -1 C BL CL C’R AR
C
h h h h-1 h h
CL CR CL C’R
h-1 h-1 h-1 h
• Subtree height is unchanged.
• No further adjustments to be done.
Single & Double Rotations
• Single
LL and RR
• Double
LR and RL
LR is RR followed by LL
RL is LL followed by RR
LR Is RR + LL
A 2 A 2 C 0
B -1 AR C AR 1 B 0 A
h h
BL -1 C B C’R BL CL C’R AR
h h h h-1 h h
CL C’R BL CL
h-1 h h h-1
After insertion. After RR rotation. After LL rotation.
Remove An Element
-1
10
1 1
7 40
0 1 -1
0 45
3 8 30
0
0 0 -1 0 60
35
1 5 20
0
25
Remove 8.
Remove An Element
-1
10
2 q 1
7 40
0 1 -1
45
3 30
0
0 0 -1 0 60
35
1 5 20
0
• Let q be parent of deleted node.25
• Retrace path from q towards root.
New Balance Factor Of q
q
• Deletion from left subtree of q => bf--.
• Deletion from right subtree of q => bf++.
• New balance factor = 1 or –1 => no change in height of
subtree rooted at q.
• New balance factor = 0 => height of subtree rooted at q
has decreased by 1.
• New balance factor = 2 or –2 => tree is unbalanced at q.
Imbalance Classification
• Let A be an ancestor (q) of the deleted node
whose balance factor has become 2 or –2
following a deletion.
• Deletion from left subtree of A => type L.
• Deletion from right subtree of A => type R.
• Type R => new bf(A) = 2.
• So, old bf(A) = 1.
• So, A has a left child B.
bf(B) = 0 => R0.
bf(B) = 1 => R1.
bf(B) = –1 => R-1.
R0 Rotation
A 1 A 2 B -1
B 0 AR B 0 A’R BL 1 A
h h-1 h
BL BR BL BR BR A’R
h h h h h h-1
Before deletion. After deletion. After rotation.
• Subtree height is unchanged.
• No further adjustments to be done.
• Similar to LL rotation.
R1 Rotation
A 1 A 2 B 0
B 1 AR B 1 A’R BL 0 A
h h-1 h
BL BR BL BR BR A’R
h h-1 h h-1 h-1 h-1
Before deletion. After deletion. After rotation.
• Subtree height is reduced by 1.
• Must continue on path to root.
• Similar to LL and R0 rotations.
R-1 Rotation
A 1 A 2 C 0
B -1 AR B -1 A’R B A
h h-1
BL b BL b C BL CL CR A’R
C
h-1 h-1 h-1 h-1
CL CR CL CR
• New balance factor of A and B depends on b.
• Subtree height is reduced by 1.
• Must continue on path to root.
• Similar to LR.
Number Of Rebalancing Rotations
• At most 1 for an insert.
• O(log n) for a delete.
Rotation Frequency
• Insert random numbers.
No rotation … 53.4% (approx).
LL/RR … 23.3% (approx).
LR/RL … 23.2% (approx).