Nothing Special   »   [go: up one dir, main page]

AVL Tree

Download as pdf or txt
Download as pdf or txt
You are on page 1of 51

AVL trees

(Adelson – Velskii – Landis)


Balanced Binary Search Tree

 Worst case height of binary search tree: N-1


 Insertion, deletion can be O(N) in the worst case
 We want a tree with small height
 Height of a binary tree with N node is at least O(log N)
 Complete binary tree has height log N.
 Goal: keep the height of a binary search tree O(log N)
 Balanced binary search trees
 Examples: AVL tree, red-black tree
AVL tree
for each node, the height of the left and right subtrees can differ by
at most d = 1.

Maintaining a stricter condition (e.g above condition with d = 0) is


difficult.

Note that our goal is to perform all the operations search, insert
and delete in O(log N) time, including the operations involved in
adjusting the tree to maintain the above balance condition.
AVL Tree
 An AVL tree is a binary search tree in which
 for every node in the tree, the height of the left and right subtrees
differ by at most 1.
 Height of subtree: Max # of edges to a leaf
 Height of an empty subtree: -1
 Height of one node: 0
AVL tree property
violated here
AVL tree
AVL Tree with Minimum Number of Nodes

N1 = 2 N2 =4 N3 = N1+N2+1=7
N0 = 1
Smallest AVL tree
of height 7
Smallest AVL tree
of height 8

Smallest AVL tree of height 9


Insertion in AVL Tree

 Basically follows insertion strategy of binary search tree


 But may cause violation of AVL tree property.
 Restore the destroyed balance condition if needed
Insertion in AVL Tree
 Basically follows insertion strategy of binary search tree
 But may cause violation of AVL tree property
 Restore the destroyed balance condition if needed

6 8

6
Insert 6
Original AVL tree Restore AVL property
Property violated
Some Observations
 After an insertion (using the insertion algorithm for a binary search
tree), only nodes that are on the path from the insertion point to the
root might have their balance altered.
 Because only those nodes have their subtrees altered

 So it’s enough to adjust the balance on these nodes.

 We will see that AVL tree property can be restored by performing a


balancing operation at a single node.
Node at which balancing must be done
 The node of smallest depth on the path from to the newly inserted node.
 We will call this node pivot.

Example:

Suppose we inserted key is 2.5

* Pivot is the node containing 4.


This is the lowest depth node in the
path where the AVL tree property is
violated.

2.5
Different Cases for Rebalance
 Let α be the pivot node
 Case 1: inserted node is in the left subtree of the left child of α (LL-
rotation)
 Case 2: inserted node is in the right subtree of the left child of α
(RL-rotation)
 Case 3: inserted node is in the left subtree of the right child of α
(LR-rotation)
 Case 4: inserted node is in the right subtree of the right child of α
(RR-rotation)
 Cases 3 & 4 are mirror images of cases 1 & 2 so we will focus on 1
& 2.
Rotations
 Rebalance of AVL tree are done with simple modification to tree,
known as rotation.

 Insertion occurs on the “outside” (i.e., left-left or right-right) is


fixed by single rotation of the tree

 Insertion occurs on the “inside” (i.e., left-right or right-left) is


fixed by double rotation of the tree
Rotations
Case 1 & 4

 The four ways to rotate nodes in an AVL tree, graphically represented


-Single Rotations:

A single rotation B
B A C
C

T0 T3
T1 T3 T0 T1 T2
T2

C single rotation B
B A C
A

T3 T3
T0 T2 T2 T1 T0
T1 13
Rotations (contd.)
Case 2 & 3

A double rotation B
C A C
B

T0 T2
T2 T3 T0 T1 T3
T1

C double rotation B
A A C
B

T0 T2
T3 T2 T3 T1 T0
T1
14
Insertion Algorithm (outline)
 First, insert the new key as a new leaf just as in ordinary binary
search tree
 Then trace the path from the new leaf towards the root. For each
node x encountered, check if heights of left(x) and right(x) differ by
at most 1.
 If yes, proceed to parent(x)
 If not, restructure by doing either a single rotation or a double rotation
 Note: once we perform a rotation at a node x, we won’t need to
perform any rotation at any ancestor of x.
Summary
AVL trees with n nodes will have height at most 1.5 log2 n

To implement AVL tree, we use an extra field at each node


that stores the height of the subtree rooted at the node.

To insert a key, at most a constant number of pointer


changes need to be performed. This is done by a single
rotation or a double rotation at the pivot node.

All dictionary operations can be performed in O(log n) time


in the WORST-CASE using AVL trees.
AVL Tree Rotations
Single rotations:

• Inserting 16 causes AVL violation:

14

15

16

• Need to rotate.
AVL Tree Rotations
Single rotations:

• Inserting 16 causes AVL violation:

14

15

16

• Need to rotate.
AVL Tree Rotations
Single rotations:

• Rotation type:

14

15

16
AVL Tree Rotations
Single rotations:

• Rotation restores AVL balance:

15

14 16
AVL Tree Rotations
Single rotations:

• Now insert 13 and 12:


15

14 16

13

12

• AVL violation - need to rotate.


AVL Tree Rotations
Single rotations:

• Rotation type:
15

14 16

13

12
AVL Tree Rotations
Single rotations:

15

13 16

12 14

• Now insert 11.


AVL Tree Rotations
Single rotations:

15

13 16

12 14

11

• AVL violation – need to rotate


AVL Tree Rotations
Single rotations:

15
• Rotation type:

13 16

12 14

11
AVL Tree Rotations
Single rotations:

13

12 15

14 16
11

• Now insert 10.


AVL Tree Rotations
Single rotations:

13

12 15

14 16
11

10

• AVL violation – need to rotate


AVL Tree Rotations
Single rotations:

• Rotation type:
13

12 15

14 16
11

10
AVL Tree Rotations
Single rotations:

13

11 15

10 12 14 16

• AVL balance restored.


AVL Tree Rotations
Double rotations: insert 1, 2, 3, 4, 5, 7, 6, 9, 8

• First insert 1 and 2:

13

11 15

10 12 14 16
AVL Tree Rotations
Double rotations:

• AVL violation - rotate


13

11 15

14 16
10 12

2
AVL Tree Rotations
Double rotations:

• Rotation type:
13

11 15

14 16
10 12

2
AVL Tree Rotations
Double rotations: • AVL balance restored:

13

11 15

2 12 14 16

1 10

• Now insert 3.
AVL Tree Rotations
Double rotations: • AVL violation – rotate:

13

11 15

2 12 14 16

1 10

3
AVL Tree Rotations
Double rotations: • Rotation type:

13

11 15

2 12 14 16

1 10

3
AVL Tree Rotations
Double rotations: • AVL balance restored:

13

10 15

2 11 14 16

1 3 12

• Now insert 4.
AVL Tree Rotations
Double rotations: • AVL violation - rotate

13

10 15

2 11 14 16

1 3 12

4
AVL Tree Rotations
Single rotations:

• Rotation type:
13

10 15

2 11 14 16

1 3 12

4
AVL Tree Rotations
Double rotations:

10
2 13

1 11 15
3

4 12 14 16

• Now insert 5.
AVL Tree Rotations
Double rotations:

10
2 13

1 11 15
3

4 12 14 16

• AVL violation – rotate.


AVL Tree Rotations
Single rotations:
• Rotation type:
10
2 13

1 11 15
3

4 12 14 16

5
AVL Tree Rotations
Single rotations:
• AVL balance restored:
10
2 13

1 11 15
4

3 5 12 14 16

• Now insert 7.
AVL Tree Rotations
Single rotations:
• AVL violation – rotate.
10
2 13

1 11 15
4

3 5 12 14 16

7
AVL Tree Rotations
Single rotations:

• Rotation type:
10
2 13

1 11 15
4

3 5 12 14 16

7
AVL Tree Rotations
Double rotations:

• AVL balance restored.


10
4 13

2 11 15
5

7 12 14 16
1 3

• Now insert 6.
AVL Tree Rotations
Double rotations:

• AVL violation - rotate.


10
4 13

2 11 15
5

7 12 14 16
1 3

6
AVL Tree Rotations
Double rotations:

• Rotation type:
10
4 13

2 11 15
5

7 12 14 16
1 3

6
AVL Tree Rotations
Double rotations:

• AVL balance restored.


10
4 13

2 11 15
6

12 14 16
1 3 5 7

• Now insert 9 and 8.


AVL Tree Rotations
Double rotations:

• AVL violation - rotate.


10
4 13

2 11 15
6

12 14 16
1 3 5 7

8
AVL Tree Rotations
Double rotations:

• Rotation type:
10
4 13

2 11 15
6

12 14 16
1 3 5 7

8
AVL Tree Rotations
Final tree:

• Tree is almost perfectly balanced


10
4 13

2 11 15
6

12 14 16
1 3 5 8

7 9

You might also like