0% found this document useful (0 votes)
84 views9 pages

CSE 326: Data Structures AVL Trees The AVL Balance Condition

The document discusses the AVL tree data structure. The key points are: 1) An AVL tree is a self-balancing binary search tree where the heights of the left and right subtrees of every node differ by at most one. This ensures the tree has small depth and fast access times of O(log n). 2) When a node is inserted or deleted, it may cause imbalance that violates the AVL property. The tree is rebalanced using single or double rotations to restore the property. 3) Rotations are performed on the path from the insertion point to the root to update heights and balance factors after each insertion.

Uploaded by

vvsprasad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
84 views9 pages

CSE 326: Data Structures AVL Trees The AVL Balance Condition

The document discusses the AVL tree data structure. The key points are: 1) An AVL tree is a self-balancing binary search tree where the heights of the left and right subtrees of every node differ by at most one. This ensures the tree has small depth and fast access times of O(log n). 2) When a node is inserted or deleted, it may cause imbalance that violates the AVL property. The tree is rebalanced using single or double rotations to restore the property. 3) Rotations are performed on the path from the insertion point to the root to update heights and balance factors after each insertion.

Uploaded by

vvsprasad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

The AVL Balance Condition

AVL balance property:


CSE 326: Data Structures
Left and right subtrees of every node
have heights differing by at most 1
AVL Trees
• Ensures small depth
› Will prove this by showing that an AVL tree of height
Neva Cherniavsky h must have a lot of (i.e. O(2h)) nodes
Summer 2006 • Easy to maintain
› Using single and double rotations

The AVL Tree Data Structure Is this an AVL Tree?


Structural properties
1. Binary tree property 10
(0,1, or 2 children) 8 •How do we track the
2. Heights of left and right balance?
5 15
subtrees of every node 5 11 •How do we detect
differ by at most 1 imbalance?
Result: 2 9 20
2 6 10 12
•How do we restore
Worst case depth of any
node is: O(log n) 7 17 30 balance?
4 7 9 13 14

Ordering property
15
› Same as for BST

Circle One:
6

4 8 AVL Height of an AVL Tree


1 7 11
Not AVL • M(h) = minimum number of nodes in an
10 12 AVL tree of height h.
6 • Basis h

4 8 AVL
› M(0) = 1, M(1) = 2
• Induction
1 5 7 11
› M(h) = M(h-1) + M(h-2) + 1 h-2
Not AVL h-1
3 • Solution
2 › M(h) > φh - 1 (φ = (1+√5)/2 ≈ 1.62)

Student Activity If not AVL, put a box around nodes where AVL property is violated.

1
Proof that M(h) > φh Height of an AVL Tree
• Basis: M(0) = 1 > φ0 -1, M(1) = 2 > φ1-1 • M(h) > φh (φ ≈ 1.62)
• Induction step. • Suppose we have N nodes in an AVL
M(h) = M(h-1) + M(h-2) + 1 tree of height h.
> (φh-1 - 1) + (φh-2 - 1) + 1 › N > M(h)
= φh-2 (φ +1) - 1 › N > φh - 1
= φh - 1 (φ2 = φ +1) › logφ(N+1) > h (relatively well balanced
tree!!)

Node Heights Node Heights after Insert 7

2 2 balance factor
2 3 1-(-1) = 2
6 6 6 6
1 0 1 1 1 1 1 2
4 9 4 9 4 9 4 9
0 0 0 0 0 0 0 0 0 0 1 -1
1 5 1 5 8 1 5 7 1 5 8
0
7
height of node = h height of node = h
balance factor = hleft-hright balance factor = hleft-hright
empty height = -1 empty height = -1

Insert and Rotation in AVL Single Rotation in an AVL


Trees Tree
• Insert operation may cause balance factor 2 2
to become 2 or –2 for some node 6 6
1 2 1 1
› only nodes on the path from insertion point to 4 9 4 8
root node have possibly changed in height 0 0 1 0 0 0 0

› So after the Insert, go back up to the root 1 5 8 1 5 7 9


node by node, updating heights 0
› If a new balance factor (the difference hleft- 7
hright) is 2 or –2, adjust tree by rotation around
the node

2
Insertions in AVL Trees Bad Case #1
Let the node that needs rebalancing be α.
Insert(6)
There are 4 cases:
Outside Cases (require single rotation) : Insert(3)
1. Insertion into left subtree of left child of α. Insert(1)
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.

Fix: Apply Single Rotation AVL Insertion: Outside Case


AVL Property violated at this node (x)
2 1
Consider a valid
AVL subtree
j
6 3

3
1
0 0 k h

1 6
1
0 h
h
Z
X Y
Single Rotation:
1. Rotate between x and child

AVL Insertion: Outside Case AVL Insertion: Outside Case


j Inserting into X j Do a “rotation from left”
destroys the AVL
property at node j
k h k h

h+1 h Z h+1 h Z
Y Y
X X

3
Single rotation from left Outside Case Completed
j k
“rotation from left” done!
(“rotation from right” is
mirror symmetric)

k h
h+1
j
h+1 h Z h h

Y X Y Z
X AVL property has been restored!

Single rotation example


15
Bad Case #2
5 20

3 10 17 21 Insert(1)
2 4 Insert(6)
1 15 Insert(3)
3 20

2 5 17 21
1 4 10

Fix: Apply Double Rotation


AVL Property violated at this node (x) AVL Insertion: Inside Case
2 2
1 1 1 Consider a valid
AVL subtree
j
3
1 1
6 3
0
0 0 k h
0 1 6
3 6 h h Z
Double Rotation X Y
1. Rotate between x’s child and grandchild
2. Rotate between x and x’s new child

4
AVL Insertion: Inside Case AVL Insertion: Inside Case
Inserting into Y
destroys the j Does “rotation from left”
restore balance? k “Rotation from left”
does not restore
AVL property balance… now k is
at node j
k h
h j out of balance

h h+1 Z X h+1
h

X Z
Y Y

AVL Insertion: Inside Case AVL Insertion: Inside Case


Consider the structure
of subtree Y… j Y = node i and
subtrees V and W
j
k h
k h

h h+1 Z h
i h+1 Z
X X h or h-1
Y
V W

AVL Insertion: Inside Case Double rotation : first rotation


2
j We will do a
“double rotation” . . .
j
1
k i
i Z k Z
X W
V W X V

5
Double rotation : second Double rotation : second
rotation rotation
j right rotation complete

Balance has been


i i restored to the universe

k Z k j
W h h or h-1
h

X V X V W Z

Double rotation, step 1 Double rotation, step 2


15 15
8 17 8 17

4 10 16 6 10 16
4
3 6
3 5
5
15 15
8 17 6 17
6 10 16 4 8 16
4 3 5 10
3 5

Imbalance at node X Insert into an AVL tree: a b e c d

Single Rotation
1. Rotate between x and child

Double Rotation
1. Rotate between x’s child and grandchild
2. Rotate between x and x’s new child

Student Activity

6
Single and Double Rotations:
Inserting what integer values Insertion into AVL tree
would cause the tree to need a:

1. single rotation? 9 1. Find spot for new key


5 11
2. Hang new node there with this key
2 7 13
3. Search back up the path for imbalance
2. double rotation? 0 3
4. If there is an imbalance:
case #1: Perform single rotation and exit

3. no rotation? case #2: Perform double rotation and exit


Both rotations keep the subtree height unchanged.
Hence only one rotation is sufficient!
Student Activity

Easy Insert Hard Insert (Bad Case #1)


3
3 Insert(33) 10
Insert(3) 10
2 2
1 2 5 15
5 15
1 0 0 1
0 0 0 1 2 9 12 20
2 9 12 20
0 0 0
0 0 3 17 30
17 30 Unbalanced?

Unbalanced? How to fix?

3
Single Rotation3 Hard Insert (Bad Case #2)
10 10 3
Insert(18) 10
2 3 2 2
5 15 5 20 2 2
5 15
1 0 0 2 1 0 1 1
2 9 12 20 2 9 15 30 1 0 0 1
2 9 12 20
0 0 1 0 0 0 0
3 17 30 3 12 17 33 0 0 0
Unbalanced? 3 17 30
0
33 How to fix?

7
Double Rotation (Step #1)
Single Rotation (oops!) 3 3
3 3 10 10
10 10
2 3 2 3
2 3 2 3 5 15 5 15
5 15 5 20
1 0 0 2 1 0 0 2
1 0 0 2 1 0 2 0 2 9 12 20 2 9 12 17
2 9 12 20 2 9 15 30
0 1 0 0 1
0 1 0 0 0 1 3 17 30 3 20
3 17 30 3 12 17
0 0 0
0 0 18 18 30
18 18

Double Rotation (Step #2) AVL Trees Revisited


3 3
10 10
• Balance condition:
For every node x, -1 ≤ balance(x) ≤ 1
2 3 2 2 › Strong enough : Worst case depth is O(log n)
5 15 5 17 › Easy to maintain : one single or double rotation
1 0 0 2 1 0 1 1
2 9 12 17 2 9 15 20
• Guaranteed O(log n) running time for
0 1 0 0 0 0 › Find ?
3 20 3 12 18 30 › Insert ?
0 0 › Delete ?
18 30 › buildTree ?

AVL Trees Revisited Other Possibilities?


• Could use different balance conditions,
• What extra info did we maintain in each different ways to maintain balance, different
node? guarantees on running time, …
• Why aren’t AVL trees perfect?
• Many other balanced BST data structures
• Where were rotations performed? › Red-Black trees
› AA trees
› Splay Trees
› 2-3 Trees
• How did we locate this node? › B-Trees
› …

8
Implementation Single Rotation
RotateFromRight(n : reference node pointer) {
balance (1,0,-1) p : node pointer;
key p := n.right; n
n.right := p.left;
left right p.left := n;
n := p
}

Y Z

Double Rotation AVL Tree Deletion


• Class participation • Similar to insertion
• Implement Double Rotation in two lines.
› Rotations and double rotations needed to
DoubleRotateFromRight(n : reference node pointer) {
????
rebalance
n
} › Imbalance may propagate upward so that
many rotations may be needed.

V W

Pros and Cons of AVL Trees


Arguments for AVL trees:
1. Search is O(log N) since AVL trees are always well balanced.
2. The height balancing adds no more than a constant factor to the
speed of insertion, deletion, and find.

Arguments against using AVL trees:


1. Difficult to program & debug; more space for height info.
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).
4. May be OK to have O(N) for a single operation if total run time for
many consecutive operations is fast (e.g. Splay trees).

You might also like