0% found this document useful (0 votes)
327 views31 pages

AVL Trees - Horowitz Sahani

- 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 1. - When a node is inserted or removed, the tree may become unbalanced. Rotations are performed to rebalance the tree and ensure the height difference property is maintained. - There are four types of rotations (single - LL, RR or double - LR, RL) that may need to be performed during insertion or removal to rebalance the tree.

Uploaded by

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

AVL Trees - Horowitz Sahani

- 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 1. - When a node is inserted or removed, the tree may become unbalanced. Rotations are performed to rebalance the tree and ensure the height difference property is maintained. - There are four types of rotations (single - LL, RR or double - LR, RL) that may need to be performed during insertion or removal to rebalance the tree.

Uploaded by

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

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).

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy