Download presentation
Presentation is loading. Please wait.
Published byBrianna Bryan Modified over 9 years ago
1
AVL trees
2
Today AVL delete and subsequent rotations Testing your knowledge with interactive demos!
3
AVL 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! =])
4
AVL 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 we’re 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)
5
BST Delete breaks an AVL tree 7 7 4 4 3 3 9 9 7 7 4 4 3 3 Delete(9) h(left) > h(right)+1 so NOT an AVL tree!
6
Replacing 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) 1 then tree is NOT AVL
7
Same example with bf(x), not h(x) 7 7 4 4 3 3 9 9 7 7 4 4 3 3 Delete(9) 0 0 -2 0 bf < -1 so NOT an AVL tree!
8
What else can BST Delete break? Balance factors of ancestors… 7 7 4 4 3 3 9 9 7 7 4 4 Delete(3) 0 0 9 9 0 0 0
9
Need 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 can cause 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 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!
10
Bad balance factors Start with an AVL tree, then do a BST Delete. What bad values can bf(x) take on? – Delete can reduce a subtree’s 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
11
Problematic 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 h+2 h x x -2 a a a a (deleted)
12
Delete(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 h+1 x x T2T2 T2T2 T1T1 T1T1 z z 2 0 T3T3 T3T3 a a h x x T2T2 T2T2 T1T1 T1T1 z z 2 1 T3T3 T3T3 a a x x T2T2 T2T2 T1T1 T1T1 z z 2 h a a T3T3 T3T3
13
Fixing case bf(x) = 2, bf(z) = 0 We do a single left rotation Preserves the BST property, and fixes bf(x) = 2 x x T2T2 T2T2 T1T1 T1T1 z z 2 h+1 h 0 T3T3 T3T3 z z T2T2 T2T2 T1T1 T1T1 x x 1 T3T3 T3T3
14
Fixing 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 x T2T2 T2T2 T1T1 T1T1 z z 2 h+1 h 1 T3T3 T3T3 z z T2T2 T2T2 T1T1 T1T1 x x 0 0 T3T3 T3T3 h
15
Delete(a): bf(x)=2, bf(z)=-1 subcases Case bf(z) = -1: we have 3 subcases. (More details)More details Case bf(y) = 0 Case bf(y) = -1 Case bf(y) = 1 x x T1T1 T1T1 z z 2 h h T3T3 T3T3 a a y y T 21 T 22 h-1 0 x x T1T1 T1T1 z z 2 a a y y T 21 T 22 h x x T1T1 T1T1 z z 2 a a y y T 21 T 22 1 T3T3 T3T3 T3T3 T3T3
16
Double right-left rotation All three subcases of bf(x)=2, bf(z)=-1 simply perform a double right-left rotation. x x z z y y y y z z x x x x y y z z
17
Delete subcases for bf(x)=2, bf(z)=-1 Case bf(y)=0: double right-left rotation! x x T1T1 T1T1 z z 2 h h T3T3 T3T3 y y T 21 T 22 0 h y y T1T1 T1T1 x x 0 0 T3T3 T3T3 z z T 21 T 22 0
18
Delete subcases for bf(x)=2, bf(z)=-1 Case bf(y)=-1: double right-left rotation! x x T1T1 T1T1 z z 2 h h T3T3 T3T3 y y T 21 h y y T1T1 T1T1 x x 0 1 T3T3 T3T3 z z T 21 T 22 0 h-1
19
Delete subcases for bf(x)=2, bf(z)=-1 Case bf(y)=1: double right-left rotation! x x T1T1 T1T1 z z 2 h h T3T3 T3T3 y y T 22 1 h y y T1T1 T1T1 x x 0 0 T3T3 T3T3 z z T 21 T 22 T 21 h-1
20
Recursively 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.
21
Interactive AVL Deletes Interactive web applet
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.