Download presentation
Presentation is loading. Please wait.
1
AVL Search Trees What is an AVL Tree? AVL Tree Implementation. Why AVL Trees? Rotations. Insertion into an AVL tree Deletion from an AVL tree
2
What is an AVL Tree? An AVL tree is a binary search tree with a height balance property: For each node v, the heights of the subtrees of v differ by at most 1. A subtree of an AVL tree is also an AVL tree. For each node of an AVL tree: Balance factor = height(right subtree) - height(left subtree) An AVL node can have a balance factor of ……………………… Determine whether the trees below are AVL trees or not. 3 1 2 4 10 13 7 3 1 2 10 13 7
3
AVL Trees Implementation public class AVLTree extends BinarySearchTree{ protected int height; public AVLTree(){ height = -1;} public int getHeight(){ return height } ; protected void adjustHeight(){ if(isEmpty()) height = -1; else height = 1 + Math.max(left.getHeight(), right.getHeight()); } protected int getBalanceFactor(){ if( isEmpty()) return 0; else return right.getHeight() - left.getHeight(); } //... }
4
Why AVL Trees? Insertion or deletion in an ordinary Binary Search Tree can cause large imbalances. In the worst case searching an imbalanced Binary Search Tree is O( ) An AVL tree is rebalanced after each insertion or deletion. The height-balance property ensures that the height of an AVL tree with n nodes is O(log n). Searching, insertion, and deletion are all O(log n).
5
What is a Rotation? A rotation is a process of switching children and parents among two or three adjacent nodes to restore balance to a tree. An insertion or deletion may cause an imbalance in an AVL tree. The deepest node, which is an ancestor of a deleted or an inserted node, and whose balance factor has changed to -2 or +2 requires rotation to rebalance the tree. 45 40 78 50 0 0 45 40 78 50 -2 -2 0 35 0 Insert 35 Deepest unbalanced node
6
What is a Rotation? (contd.) There are two kinds of single rotation: Right Rotation. Left Rotation. A double right-left rotation is a right rotation followed by a left rotation. A double left-right rotation is a left rotation followed by a right rotation. 45 40 78 50 -2 -2 0 35 0 45 40 78 50 0 0 0 35 0 rotation
7
Single Right Rotation Single right rotation: The left child x of a node y becomes y's parent. y becomes the right child of x. The right child T 2 of x, if any, becomes the left child of y. x T1T1 T2T2 y T3T3 deepest unbalanced node a right rotation of x about y y T3T3 T2T2 x T1T1 Note: The pivot of the rotation is the deepest unbalanced node
8
Single Left Rotation Single left rotation: The right child y of a node x becomes x's parent. x becomes the left child of y. The left child T 2 of y, if any, becomes the right child of x. y T3T3 T2T2 x T1T1 deepest unbalanced node a left rotation of y about x x T1T1 T2T2 y T3T3 Note: The pivot of the rotation is the deepest unbalanced node
9
Single Right Rotation Implementation protected void rightRotate(){ if( isEmpty()) throw new InvalidOperationException(); BinaryTree temp = right; right = left; left = right.left; right.left = right.right; right.right = temp; Object tmpObj = key; key = right.key; right.key = tempObj; getRightAVL().adjustHeight(); adjustHeight(); }
10
Single Right Rotation Implementation (example)
11
Single Right Rotation Implementation (example) contd
20
Double Right-Left Rotation z T4T4 T3T3 y T2T2 x T1T1 y T3T3 T2T2 z T4T4 x T1T1 z T4T4 T3T3 x T1T1 y T2T2 right rotation of y about z deepest unbalanced node left rotation of Y about X Note: First pivot is the right child of the deepest unbalanced node; second pivot is the deepest unbalanced node
21
Double Left-Right Rotation w T2T2 T3T3 v T1T1 x T4T4 v T1T1 T2T2 w T3T3 x T4T4 x T4T4 T3T3 v T1T1 w T2T2 left rotation of w about v deepest unbalanced node left rotation of W about X Note: First pivot is the left child of the deepest unbalanced node; second pivot is the deepest unbalanced node
22
Double Rotation implementation 1 protected void rotateRightLeft() 2 { 3 if( isEmpty()) 4 throw new InvalidOperationException(); 5 getRightAVL().rotateRight(); 6 rotateLeft(); 7 } 1 protected void rotateLeftRight() 2 { 3 if( isEmpty()) 4 throw new InvalidOperationException(); 5 getLeftAVL().rotateLeft(); 6 rotateRight(); 7 }
23
BST ordering property after a rotation A rotation does not affect the ordering property of a BST (Binary Search Tree). y T3T3 T2T2 x T1T1 x T1T1 T2T2 y T3T3 a right rotation of x about y BST ordering property requirement: T 1 < x < yT 1 < x < y x < T 2 < y Similar x < T 2 < y x < y < T 3 x < y < T 3 Similarly for a left rotation.
24
Insertion Insert using a BST insertion algorithm. Rebalance the tree if an imbalance occurs. An imbalance occurs if a node's balance factor changes from -1 to -2 or from+1 to +2. Rebalancing is done at the deepest or lowest unbalanced ancestor of the inserted node. There are three insertion cases: 1.Insertion that does not cause an imbalance. 2.Same side (left-left or right-right) insertion that causes an imbalance. Requires a single rotation to rebalance. 3.Opposite side (left-right or right-left) insertion that causes an imbalance. Requires a double rotation to rebalance.
25
Insertion: case 1 Example: An insertion that does not cause an imbalance. Insert 14
26
Insertion: case 2 Case 2a: The lowest node (with a balance factor of -2) had a taller left-subtree and the insertion was on the left-subtree of its left child. Requires single right rotation to rebalance. Insert 3 right rotation, with node 10 as pivot -2
27
Insertion: case 2 (contd) Case 2b: The lowest node (with a balance factor of +2) had a taller right-subtree and the insertion was on the right-subtree of its right child. Requires single left rotation to rebalance. Insert 45 left rotation, with node 30 as the pivot +2 +1
28
Insertion: case 3 Case 3a: The lowest node (with a balance factor of -2) had a taller left-subtree and the insertion was on the right-subtree of its left child. Requires a double left-right rotation to rebalance. Insert 7 left rotation, with node 5 as the pivot right rotation, with node 10 as the pivot -2 +1
29
Insertion: case 3 (contd) Case 3b: The lowest node (with a balance factor of +2) had a taller right-subtree and the insertion was on the left-subtree of its right child. Requires a double right-left rotation to rebalance. Insert 15 right rotation, with node 16 as the pivot left rotation, with node 9 as the pivot +2
30
AVL Rotation Summary -2 +1 -2 +1 +2 Single right rotation Double left-right rotation Single left rotation Double right-left rotation
31
Insertion Implementation The insert method of the AVLTree class is: Recall that the insert method of the BinarySearchTree class is: public void insert(Comparable comparable){ if(isEmpty()) attachKey(comparable); else { Comparable key = (Comparable) getKey(); if(comparable.compareTo(key)==0) throw new IllegalArgumentException("duplicate key"); else if (comparable.compareTo(key)<0) getLeftBST().insert(comparable); else getRightBST().insert(comparable); } public void insert(Comparable comparable){ super.insert(comparable); balance(); }
32
Insertion Implementation (contd) The AVLTree class overrides the attachKey method of the BinarySearchTree class: public void attachKey(Object obj) { if(!isEmpty()) throw new InvalidOperationException(); else { key = obj; left = new AVLTree(); right = new AVLTree(); height = 0; }
33
Insertion Implementation (contd) protected void balance(){ adjustHeight(); int balanceFactor = getBalanceFactor(); if(balanceFactor == -2){ if(getLeftAVL().getBalanceFactor() < 0) rotateRight(); else rotateLeftRight(); } else if(balanceFactor == 2){ if(getRightAVL().getBalanceFactor() > 0) rotateLeft(); else rotateRightLeft(); }
34
Deletion Delete by a BST deletion by copying algorithm. Rebalance the tree if an imbalance occurs. There are three deletion cases: 1.Deletion that does not cause an imbalance. 2.Deletion that requires a single rotation to rebalance. 3.Deletion that requires two or more rotations to rebalance. Deletion case 1 example: Delete 14
35
Deletion: case 2 examples Delete 40 right rotation, with node 35 as the pivot
36
Deletion: case 2 examples (contd) Delete 32 left rotation, with node 44 as the pivot
37
Deletion: case 3 examples Delete 40 0 right rotation, with node 35 as the pivot right rotation, with node 30 as the pivot
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.