Title: AVL%20trees
1AVL trees
2Today
- AVL delete and subsequent rotations
- Testing your knowledge with interactive demos!
3AVL tree
- Is a binary search tree
- Has an additional height constraint
- For each node x in the tree, Height(x.left)
differs from Height(x.right) by at most 1 - I promise
- If you satisfy the height constraint, then the
height of the tree is O(lg n). - (Proof is easy, but no time! )
4AVL tree
- To be an AVL tree, must always
- (1) Be a binary search tree
- (2) Satisfy the height constraint
- Suppose we start with an AVL tree, then delete as
if were in a regular BST. - Will the tree be an AVL tree after the delete?
- (1) It will still be a BST
- (2) Will it satisfy the height constraint?
- (Not covering insert, since you already did in
class)
5BST Delete breaks an AVL tree
7
7
Delete(9)
4
9
4
3
3
h(left) gt h(right)1 so NOT an AVL tree!
6Replacing the height constraint with balance
factors
- Instead of thinking about the heights of nodes,
it is helpful to think in terms of balance
factors - The balance factor bf(x) h(x.right) h(x.left)
- bf(x) values -1, 0, and 1 are allowed
- If bf(x) lt -1 or bf(x) gt 1 then tree is NOT AVL
7Same example with bf(x), not h(x)
7
7
-2
-1
Delete(9)
4
9
4
-1
-1
0
3
3
0
0
bf lt -1 so NOT an AVL tree!
8What else can BST Delete break?
- Balance factors of ancestors
7
7
0
-1
-1
Delete(3)
9
4
9
4
0
-1
-1
0
0
3
0
9Need a new Delete algorithm
- Goal if tree is AVL before Delete, then tree is
AVL after Delete. - Step 1 do BST delete.
- This maintains the BST property, but cancause
the balance factors of ancestors to be outdated! - Step 2 fix the height constraint and update
balance factors. - Update any invalid balance factors affected by
delete. - After updating them, they can be lt -1 or gt 1.
- Do rotations to fix any balance factors that are
too small or large while maintaining the BST
property. - Rotations can cause balance factors to be
outdated also!
10Bad balance factors
- Start with an AVL tree, then do a BST Delete.
- What bad values can bf(x) take on?
- Delete can reduce a subtrees height by 1.
- So, it might increase or decrease h(x.right)
h(x.left) by 1. - So, bf(x) might increase or decrease by 1.
- This means
- if bf(x) 1 before Delete, it might become 2.
BAD. - If bf(x) -1 before Delete, it might become -2.
BAD. - If bf(x) 0 before Delete, then it is still -1,
0 or 1. OK.
2 cases
11Problematic cases for Delete(a)
- bf(x) -2 is just symmetric to bf(x) 2.
- So, we just look at bf(x) 2.
x
x
2
-2
h
h2
a
a
(deleted)
12Delete(a) 3 subcases for bf(x)2
- Since tree was AVL before, bf(z) -1, 0 or 1
- Case bf(z) -1 Case bf(z) 0 Case
bf(z) 1
x
2
z
T1
-1
h
a
T2
T3
h
h1
h1
13Fixing case bf(x) 2, bf(z) 0
- We do a single left rotation
- Preserves the BST property, and fixes bf(x) 2
x
z
2
-1
z
x
T3
T1
0
1
h
T2
T3
T2
T1
h1
14Fixing case bf(x) 2, bf(z) 1
- We do a single left rotation (same as last case)
- Preserves the BST property, and fixes bf(x) 2
x
z
2
0
z
x
T3
T1
1
0
h
T2
T3
T2
T1
h
h1
15Delete(a) bf(x)2, bf(z)-1 subcases
- Case bf(z) -1 we have 3 subcases. (More
details) - Case bf(y) 0 Case bf(y) -1
Case bf(y) 1
x
x
2
2
z
z
T1
T1
-1
-1
y
y
y
a
T3
T3
0
a
a
-1
1
T21
T22
T21
T22
T21
T22
h-1
h
16Double right-left rotation
- All three subcases of bf(x)2, bf(z)-1 simply
perform a double right-left rotation.
x
x
y
z
y
z
x
y
z
17Delete subcases for bf(x)2, bf(z)-1
- Case bf(y)0 double right-left rotation!
x
y
2
0
z
x
z
T1
-1
0
0
h
T1
T22
T21
T3
y
T3
0
h
T21
T22
h
18Delete subcases for bf(x)2, bf(z)-1
- Case bf(y)-1 double right-left rotation!
x
y
2
0
z
x
z
T1
-1
1
0
h
T1
T22
T21
T3
y
T3
-1
h
T21
T22
h-1
h
19Delete subcases for bf(x)2, bf(z)-1
- Case bf(y)1 double right-left rotation!
x
y
2
0
z
x
z
T1
-1
0
-1
h
T1
T22
T21
T3
y
T3
1
h
T22
T21
h-1
h
20Recursively fixing balance factors
- Idea start at the node we deleted, fix a
problem, then recurse up the tree to the root. - At each node x, we update the balance factor
bf(x) h(bf.right) - h(bf.left). - If bf(x) -2 or 2, we perform a rotation.
- Then, we update the balance factors of every node
that was changed by the rotation. - Finally, we recurse one node higher up.
21Interactive AVL Deletes