You are on page 1of 33

Data Structures and Algorithms

AVL Search Tree

By
Ravi Kant Sahu
Asst. Professor,
Lovely Professional University, Punjab
Balanced and Unbalanced BST
1 4
2
2 5
3
1 3
4
4 Is this “balanced”?
5
2 6 6
1 3 5 7 7
3
AVL Search Tree
• Skewed Binary Search Tree:
Worst case time complexity is O(n).

• Adelson-Velskii and Landis introduced height balanced tree in 1962.

• Balance factor of a node =


height(left sub-tree) - height(right sub-tree)
AVL - Good but not Perfect Balance
• AVL trees are height-balanced binary search trees.

• An AVL tree has balance factor calculated at every


node
› For every node, heights of left and right sub-tree
can differ by no more than 1

› Balance Factor of a node is -1, 0 or 1 in AVL.

5
Node Heights
Tree A (AVL) Tree B (AVL)
height=2 BF=1-0=1
2
6 6
1 0 1 1
4 9 4 9
0 0 0 0 0
1 5 1 5 8

height of node = h
balance factor = hleft-hright
6
Node Heights after Insert 7
Tree A (AVL) Tree B (not AVL)
balance factor
2 3 1-(-1) = 2
6 6
1 1 1 2
4 9 4 9
0 0 0 0 0 1 -1
1 5 7 1 5 8
0
7

7
Basic Concepts
LR and RL Rotation
• Find Out the first Node from the bottom which has BF other
than 1, 0, -1, call it A and its descendent towards the newly
inserted node as B.

• LR Rotation: If newly inserted node is in the right subtree of


left subtree of A.
• Apply RR rotation on B
• Then Apply LL rotation on A
• RL Rotation: If newly inserted node is in the left subtree of
right subtree of A.
• Apply LL rotation on B
• Then Apply RR rotation on A
Insert and Rotation in AVL
Trees
• Insert operation may cause balance factor
to become 2 or –2 for some node
› only nodes on the path from insertion point to
root node have possibly changed in height
› So after the Insert, go back up to the root
node by node, updating heights
› If a new balance factor (the difference hleft-
hright) is 2 or –2, adjust tree by rotation around
the node
9
Single Rotation in an AVL
Tree
2 2
6 6
1 2 1 1
4 9 4 8
0 0 1 0 0 0 0
1 5 8 1 5 7 9
0
7

10
Insertions in AVL Trees
Let the node that needs rebalancing be .

There are 4 cases:


Outside Cases (require single rotation) :
1. Insertion into left subtree of left child of .
2. Insertion into right subtree of right child of .
Inside Cases (require double rotation) :
3. Insertion into right subtree of left child of .
4. Insertion into left subtree of right child of .
The rebalancing is performed through four
separate rotation algorithms.
11
AVL Insertion: Outside Case
Consider a valid
AVL subtree
j

k h

h
h
Z
X Y
12
AVL Insertion: Outside Case
j Inserting into X
destroys the AVL
property at node j
k h

h+1 h Z
Y
X
13
AVL Insertion: Outside Case
j Do a “right rotation”

k h

h+1 h Z
Y
X
14
Single right rotation
j Do a “right rotation”

k h

h+1 h Z
Y
X
15
Outside Case Completed
“Right rotation” done!
k (“Left rotation” is mirror
symmetric)

h+1
j
h h

X Y Z
AVL property has been restored!
16
AVL Insertion: Inside Case
Consider a valid
AVL subtree
j

k h

h h Z
X Y
17
AVL Insertion: Inside Case
Inserting into Y
destroys the j Does “right rotation”
restore balance?
AVL property

k
at node j
h

h h+1 Z
X
Y
18
AVL Insertion: Inside Case

k “Right rotation”
does not restore
balance… now k is
h j out of balance

X h+1
h

Z
Y
19
AVL Insertion: Inside Case
Consider the structure
of subtree Y… j
k h

h h+1 Z
X
Y
20
AVL Insertion: Inside Case
Y = node i and
subtrees V and W
j
k h

h
i h+1 Z
X h or h-1

V W
21
AVL Insertion: Inside Case
j We will do a left-right
“double rotation” . . .

k
i Z
X
V W
22
Double rotation : first rotation
j left rotation complete

i
k Z
W
X V
23
Double rotation : second rotation

j Now do a right rotation

i
k Z
W
X V
24
Double rotation : second rotation

right rotation complete

Balance has been


i restored

k j
h h
h or h-1

X V W Z
25
Exercise
• Construct an AVL Search Tree by inserting
the following elements:

• 50, 20, 80, 10, 30, 5, 15, 17, 19, 14, 16, 18
• F, C, E, T, J, Z, D, B, A, Y

26
Implementation

balance (1,0,-1)
key
left right

No need to keep the height; just the difference in height,


i.e. the balance factor; this has to be modified on the path of
insertion even if you don’t perform rotations
Once you have performed a rotation (single or double) you won’t
need to go back up the tree

27
Insertion in AVL Trees
• Insert at the leaf (as for all BST)
› only nodes on the path from insertion point to
root node have possibly changed in height
› So after the Insert, go back up to the root
node by node, updating heights
› If a new balance factor (the difference hleft-
hright) is 2 or –2, adjust tree by rotation around
the node
28
Example of Insertions in an
AVL Tree
2
20 Insert 5, 40
0 1
10 30
0 0
25 35

29
Example of Insertions in an
AVL Tree
2
3
20 20
1 1 1 2
10 30 10 30
0 0 0 1
0 0
5 25 35 5 25 35
0
40
Now Insert 45

30
Single rotation (outside case)
3
3
20 20
1 2 1 2
10 30 10 30
0 0 2
0 0
5 25 35 5 25 40 1
0 0
35 45
Imbalance 1 40

0 45
Now Insert 34

31
Double rotation (inside case)
3
3
20 20
1 3 1 2
10 30 10 35
0 0 2
0 1
5 Imbalance 25 40 5 30 40 1
0
1 35 45 0 0 25 34 45
Insertion of 34 0
34

32
Pros and Cons of AVL Trees
Arguments for AVL trees:
1. Search is O(log N) since AVL trees are always balanced.
2. Insertion and deletions are also O(logn)
3. The height balancing adds no more than a constant factor to the
speed of insertion.

Arguments against using AVL trees:


1. Difficult to program & debug; more space for balance factor.
2. Asymptotically faster but rebalancing costs time.
3. Most large searches are done in database systems on disk and use
other structures (e.g. B-trees).

33

You might also like