AVL Trees
CSE 332 21AU Lecture 8Announcements
Exercises 4 and 5 come out tonight.
Ex 4 is another experiment in new types of autograding.
Ex 5 (writing proofs! Hooray!) is going to be hand-graded by TAs.
Both are due Friday Oct. 22
P2 partner form available, due Saturday night.
Simple Dictionary Implementations
Insert Find Delete
Unsorted Linked List Θ(𝑛) Θ(𝑛) Θ(𝑛)
Unsorted Array Θ(𝑛) Θ(𝑛) Θ 𝑛
Sorted Linked List Θ(𝑛) Θ(𝑛) Θ(𝑛)
Sorted Array Θ(𝑛) Θ(log 𝑛) Θ(𝑛)
What are the worst case running times for each operation if you have 𝑛 (key, value) pairs.
Assume the arrays do not need to be resized.
Think about what happens if a repeat key is inserted!
A Better Implementation
What about BSTs?
Keys will have to be comparable…
Insert Find Delete
Average
Worst
A Better Implementation
What about BSTs?
Keys will have to be comparable…
Insert Find Delete
Average Θ(log 𝑛) Θ(log 𝑛)
Worst Θ(𝑛) Θ(𝑛)
Let’s talk about how to implement delete.
Deletion from BSTs
Deleting will have three steps:
- Finding the element to delete - Removing the element
- Restoring the BST property
Deletion – Easy Cases
What if the elements to delete is:
- A leaf?
- Has exactly one child?
6
7 2
8 4
9
Deletion – Easy Cases
What if the elements to delete is:
- A leaf?
- Has exactly one child?
6
7 2
8 4
9
Deleting a leaf:
Just get rid of it.
Delete(7)
Deletion – Easy Cases
What if the elements to delete is:
- A leaf?
- Has exactly one child?
6
7 2
8 4
9
Deleting a node with one child:
Delete the node
Connect its parent and child
Delete(4)
Deletion – The Hard Case
What happens if the node to delete has two children?
4
2 5
7 3
9
8 10
6
What if we try Delete(7)?
What can we replace it with?
6 or 8
The biggest thing in left
subtree or smallest thing in
right subtree.
A Better Implementation
What about BSTs?
Keys will have to be comparable.
Insert Find Delete
Average Θ(log 𝑛) Θ(log 𝑛)
Worst Θ(𝑛) Θ(𝑛)
A Better Implementation
What about BSTs?
Keys will have to be comparable.
Insert Find Delete
Average Θ(log 𝑛) Θ(log 𝑛) Θ(log 𝑛)
Worst Θ(𝑛) Θ(𝑛) Θ(𝑛)
We’re in the same position we were in for heaps BSTs are great on average,
but we need to avoid the worst case.
Avoiding the Worst Case
Take I:
Let’s require the tree to be complete.
It worked for heaps!
What goes wrong:
When we insert, we’ll break the completeness property.
Insertions always add a new leaf, but you can’t control where.
Can we fix it?
Not easily :/
Avoiding the Worst Case
Take II:
Here are some other requirements you might try. Could they work? If not what can go wrong?
Root Balanced: The root must have the same number of nodes in its left and right subtrees
Recursively Balanced: Every node must have the same number of nodes in its left and right subtrees.
Root Height Balanced: The left and right subtrees of the root must
have the same height.
Avoiding the Worst Case
Take III:
The AVL condition
This actually works. To convince you it works, we have to check:
1. Such a tree must have height 𝑂(log 𝑛) .
2. We must be able to maintain this property when inserting/deleting AVL condition: For every node, the height of its left subtree and
right subtree differ by at most 1.
Warm-Up
AVL condition: For every node, the height of its left subtree and right subtree differ by at most 1.
Is this a valid AVL tree? 4
2 5
7 3
9
8 10
6
Are These AVL Trees?
6
2 4
7 3
9
8 10
5
4
2 5
7 3
9
8 10
6
Insertion
What happens if when we do an insertion, we break the AVL condition?
1
2
3 1
2
3
Left Rotation
x
y
z
Rest of
the tree UNBALANCED
Right subtree is 2 longer
A B
C D
x
y
z
Rest of the tree
A B
C D
BALANCED
Subtrees are equal heights
It Gets More Complicated
1
3
2
Can’t do a left rotation
Do a “right” rotation around 3 first.
1
3 2
Now do a left rotation.
1
2
3
There’s a “kink” in the tree where the insertion
happened.
Right Left Rotation
x
z y
Rest of the tree
A
B C
D
x
y
z
Rest of the tree
A
B
C D
BALANCED
Right subtree is 1 longer
UNBALANCED
Right subtree is 2 longer Left subtree is
1 longer
Four Types of Rotations
x
y
z
A B C D
Insert location Solution Left subtree of left
child (A) Single right rotation Right subtree of
left child (B) Double (left-right) rotation Left subtree of
right child (C) Double (right-left) rotation Right subtree of
right child(D) Single left rotation
AVL Example: 8,9,10,12,11
CSE 373 SU 18 – BEN JONES 23
8
9
10
AVL Example: 8,9,10,12,11
CSE 373 SU 18 – BEN JONES 24
8
9
10
AVL Example: 8,9,10,12,11
CSE 373 SU 18 – BEN JONES 25
8
11 9
10
12
AVL Example: 8,9,10,12,11
CSE 373 SU 18 – BEN JONES 26
8
11 9
10
12
AVL Example: 8,9,10,12,11
CSE 373 SU 18 – BEN JONES 27
8
9
10
11
12