1 / 44

AVL Trees

AVL Trees. Joe Meehean. Problem. BST efficiency relies on height lookup, insert, delete: O(height) a balanced tree has the smallest height We can balance an unbalanced tree DSW expensive How can we ensure that our BST stays balanced? after inserts and deletes. AVL Trees.

cate
Download Presentation

AVL Trees

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AVL Trees Joe Meehean

  2. Problem • BST efficiency relies on height • lookup, insert, delete: O(height) • a balanced tree has the smallest height • We can balance an unbalanced tree • DSW • expensive • How can we ensure that our BST stays balanced? • after inserts and deletes

  3. AVL Trees • Adelson-Velskii and Landis • Binary search tree • Additional balance condition • for every node • height of subtrees differ by at most 1 • must store height of each node • empty tree has height of -1

  4. Insert • Insert as normal (BST) • Update heights • Check balance condition • height differences of nodes • along path from new node to root • Use rotation to fix imbalances

  5. Insert • Fixing imbalance at node A • 4 cases: Insertion into • left subtree of left child of A • right subtree of left child of A • left subtree of right child of A • right subtree of right child of A • Cases 1 & 4 are outside inserts • Cases 2 & 3 are inside inserts

  6. Outside Insert A h: 4 h: 3 h: 2 B Z h: 2 h: 2 X Y • Insert key less than A & B

  7. Outside Insert A h: 5 A h: 4 h: 4 h: 2 h: 3 h: 2 B Z B Z h: 3 h: 2 h: 2 h: 2 X Y X Y • Insert key less than A & B

  8. DISCUSSION BREAK!!! What series of rotations can we do to fix this?

  9. Outside Insert A h: 5 h: 4 h: 2 B Z h: 3 h: 2 X Y • Rotate A with “highest” subtree

  10. Outside Insert A B h: 5 h: 4 h: 4 h: 2 h: 3 A h: 3 B Z X h: 2 h: 3 h: 2 h: 2 X Z Y Y • Rotate A with “highest” subtree

  11. Outside Insert B h: 4 h: 3 A h: 3 X h: 2 h: 2 Z Y Are we done? Worry about imbalances above B?

  12. Outside Insert B h: 4 h: 3 A h: 3 X h: 2 h: 2 Z Y • B tree same height asA tree before insert • Property of outside insert rebalances • Right-right imbalance similar

  13. Outside Insert • More specifically • Balance factor = h(left) – h(right) • If node N has a balance factor of 2, • left subtree (L) is too high • if L has a balance factor of 1 • rotate N & L • If node N has a balance factor of -2, • right subtree(R) is too high • if Rhas a balance factor of -1 • rotate N& R

  14. Questions?

  15. Insert • Fixing imbalance at node A • 4 cases: Insertion into • left subtree of left child of A • right subtree of left child of A • left subtree of right child of A • right subtree of right child of A • Cases 1 & 4 are outside inserts • Cases 2 & 3 are inside inserts

  16. Inside Insert A h: 4 h: 3 h: 2 B Z h: 2 h: 2 X Y • Insert key less than A, greater than B

  17. Inside Insert A h: 4 A h: 5 h: 3 h: 2 h: 4 h: 2 B Z B Z h: 2 h: 2 h: 2 h: 3 X Y X Y • Insert key less than A, greater than B

  18. Inside Insert A h: 5 h: 4 h: 2 B Z h: 2 h: 3 X Y • Let’s try to rotate A & B again

  19. Inside Insert A h: 5 B h: 5 h: 4 h: 2 h: 4 h: 2 X A B Z h: 2 h: 3 h: 3 h: 2 X Y Y Z • Let’s try to rotate A & B again

  20. Inside Insert A h: 5 A h: 5 h: 4 h: 2 B Z h: 4 h: 2 B Z h: 3 h: 2 C X h: 2 h: 3 X Y h: 2 R Q h: 1 • Let’s expand Y

  21. Inside Insert A h: 5 h: 4 C h: 3 h: 3 h: 4 h: 2 A B B Z h: 3 h: 2 h: 2 Z R h: 2 C X h: 2 h: 1 X h: 2 R h: 1 Q Q • What if we made C the root

  22. DISCUSSION BREAK!!! What series of rotations can we do to accomplish this?

  23. Inside Insert A A h: 5 h: 5 h: 4 h: 2 h: 4 h: 2 C B Z Z h: 3 h: 3 B R h: 2 h: 2 C X R h: 2 X h: 2 h: 1 Q Q h: 1 • Rotate left child (B) with its right child (C)

  24. Inside Insert h: 4 A h: 5 C h: 3 h: 3 h: 4 h: 2 A C B Z h: 3 B h: 2 h: 2 R R Z h: 2 h: 2 h: 1 X Q X h: 2 h: 2 Q • Rotate root (A) with its new left child (C)

  25. Inside Insert h: 4 C h: 3 h: 3 A B h: 2 h: 2 R Z h: 2 h: 1 X Q Are we done? Worry about imbalances above ?

  26. Inside Insert h: 4 C h: 3 h: 3 A B h: 2 h: 2 R Z h: 2 h: 1 X Q C tree same height asA tree before insert Property of inside insert rebalances Right-left imbalance similar

  27. Inside Insert More generally If there is an inside imbalance at A Find A’s highest child, B Rotate B with its highest child, C Rotate A with C

  28. Inside Insert • More specifically • Balance factor = h(left) – h(right) • If node N has a balance factor of 2, • left subtree (L) is too high • if L has a balance factor of -1 • rotate L with L’s right child • rotate N with its new left child

  29. Inside Insert • More specifically • Balance factor = h(left) – h(right) • If node N has a balance factor of -2, • right subtree (R) is too high • if R has a balance factor of 1 • rotate R with R’s left child • rotate N with it’s new right child

  30. Questions?

  31. BST Delete Review • Find the node N w/ key to be deleted • Different actions depending on N’s # of kids • Case 1: N has 0 kids (it’s a leaf) • set parent’s N-pointer (left or right) to null • Case 2: N has 1 kid • set parent’s N-pointer to point to N’s only kid • Case 3: N has 2 kids • Replace N’s key with a key further down in the tree • Delete that node

  32. BST Delete Review • What node value can replace n’s value? • new value of n must be: • > all values in left subtree • < all values in right subtree • Largest value from the left subtree • Smallest value from the right subtree • let’s choose this one (arbitrarily) • use findMin on root of right subtree

  33. Deletion Deletes can also imbalance an AVL tree Can we fix these imbalances with rotations too? How many rotations do we need to do?

  34. Deletion 50 delete(50) h: 4 h: 5 X 75 h: 2 h: 3 Y 60 Smallest value in right subtree h: 1 55 h: 2 65 h: 1 h: 0 h: 0 Z 57 62

  35. Deletion 55 delete(50) h: 4 h: 5 X 75 h: 2 h: 3 Y 60 Copy smallest key in R subtree h: 1 55 h: 2 65 h: 1 h: 0 h: 0 Z 57 62

  36. Deletion 55 delete(50) h: 4 h: 5 X 75 h: 2 h: 3 Y 60 delete(55) from R subtree 57 h: 2 65 h: 0 h: 1 h: 0 Z 62

  37. Deletion 55 delete(50) h: 3 h: 5 X 75 h: 2 h: 2 Y 65 Fix imbalance h: 1 h: 1 60 Z h: 0 h: 0 62 57

  38. Deletion 55 delete(50) h: 3 h: 5 X 75 h: 2 Y 65 h: 1 60 Z New imbalance Need to rebalance all the way up to root h: 0 h: 0 62 57

  39. Deletion • More generally • Perform a BST delete • Check for imbalances along path to root • Rebalance using expanded insert rules • if delete happened in “light” child • “heavy” child may have a balance factor of 0 • additional case from insertion rules

  40. Rebalance Rules • Balance factor = h(left) – h(right) • Given node N and its two children L& R • bf(N) == -2 & bf(R) == 0 • single right child rotation • bf(N) == -2 & bf(R)== -1 • single right child rotation • bf(N) == -2 & bf(R) == 1 • double right child rotation (from inside insert)

  41. Rebalance Rules • Balance factor = h(left) – h(right) • Given node N and its two children R & L • bf(N) == 2 & bf(L) == 0 • single left child rotation • bf(N) == 2 & bf(L) == 1 • single left child rotation • bf(N) == 2 & bf(L) == -1 • double left child rotation (from inside insert)

  42. Summary • BST • insert, delete, lookup O(H), H is height of tree • AVL • like BST, but ensures balance • balanced tree has height of log N • Balancing • rotations on insert and delete

  43. Summary • AVL Complexity • Insert • inserting node: O(H) == O(logN) • rebalance: O(rotations) == O(2) == O(1) • Erase • deleting a node: O(H) == O(logN) • rebalance: O(rotations) == O(logN)

  44. Questions?

More Related