CS261 Data Structures

29
CS261 Data Structures AVL Trees

description

CS261 Data Structures. AVL Trees. Goals. Pros/Cons of a BST AVL Solution Height-Balanced Trees. Binary Search Tree: Balance. 50. 25. 75. 20. 35. 60. 85. 30. 45. 65. 80. Binary Search Tree: Balance. 50. 75. 85. 92. 90. Complete Binary Trees. Alex. Abner. Angela. - PowerPoint PPT Presentation

Transcript of CS261 Data Structures

Page 1: CS261 Data Structures

CS261 Data Structures

AVL Trees

Page 2: CS261 Data Structures

Goals

• Pros/Cons of a BST• AVL Solution– Height-Balanced Trees

Page 3: CS261 Data Structures

Binary Search Tree: Balance

50

25 75

35 60 85

30 45 65 80

20

Page 4: CS261 Data Structures

Binary Search Tree: Balance

50

75

85

90

92

Page 5: CS261 Data Structures

Complete Binary Trees

• Very costly to maintain acomplete binary tree

Alex

Abner Angela

Adela Alice

Adam

Abigail

Add Adam to tree

Page 6: CS261 Data Structures

Height-Balanced BST

• For each node, the height difference between the left and right subtrees is at most one

• Trees are locally balanced, but globally they can be slightly more unbalanced

• Null child height = -1 3(3)

9(0)1(0)

8(2)2(1)

4(0)

5(1)

6(0)

Height-Balanced Tree

Page 7: CS261 Data Structures

Quiz

• Are these trees height balanced? If not, which node is out of balance?

3

2

32

50

4016

50

70

6016

55

Page 8: CS261 Data Structures

Quiz

• Are these trees height balanced? If not, which node is out of balance?

100

160

15050

155

100

130

12050

115

110

Page 9: CS261 Data Structures

Height-Balanced Trees

• Mathematically, the longest path in a height-balanced tree has been shown to be, at worst, 44% longer than log n

• Therefore, algorithms on height-balanced trees that run in time proportional to the path length are still O(log n)

• So.....How do we maintain height balance??

Page 10: CS261 Data Structures

AVL Trees

• Named after the inventors’ initials: G.M. Adelson-Velskii, E.M. Landis

• Maintain the height balanced property of a BST through a series of rotations

• When unbalanced, performs a “rotation” to balance the tree

1(2)Node data Height field

3(0)

2(1)

1(2)

3(0)1(0)

2(1)

Rotateleft

Unbalancednode

Page 11: CS261 Data Structures

Two Cases to Remember (Mirror for Right)

1

2

1

2

After operation

1

2

After operation1

2

Heavy left child

becomes heavy itself on the left!(Single Rot)

unbalanced

Heavy left child

becomes heavy itself

on the right !

(Double Rot)

Page 12: CS261 Data Structures

Fix with Rotations…

3(0)

2(1)

1(2)

Page 13: CS261 Data Structures

Case 1: Single Rotation

3(0)

2(1)

1(2)

3(0)1(0)

2(1)

Rotateleft

Unbalanced“top” node

Page 14: CS261 Data Structures

Case 1: Single Rotation Example 2

1(0)

2(3)

6(0)

3(0)

4(2)

5(1) 1(0)

2(1)

6(0)3(0)

4(2)

5(1)Rotate

left

Unbalanced“top” node

New “top” node

Page 15: CS261 Data Structures

AVL Trees: Rotation Pseudocode

Pseudocode to rotate current (“top”) node left:1. New top node is the current top node’s right child2. Current node’s new right child is the new top node’s left child3. New top’s left child is the current node4. Set height of current node 5. Set height of new top node6. Return new top node

1(0)

2(3)

6(0)

3(0)

4(2)

5(1) 1(0)

2(1)

6(0)3(0)

4(2)

5(1)Rotate

left

“Current”top node

“New” top node

Page 16: CS261 Data Structures

Case 2: Double Rotation

• Sometimes a single rotation will not fix the problem:

– Can happen when an insertion is made on the left (or

right) side of a node that is itself a heavy right (or left) child

2

1Unbalancednode

3“Heavy”right child

2(0)

3(2)

1(1)Rotate

left

Doesn’twork!!!

Page 17: CS261 Data Structures

Case 2: Double Rotation

• Fortunately, this case is easily handled by rotating the child before the regular rotation:1.First rotate the heavy right (or left) child to the right (or

left)

2.Rotate the unbalanced node to the left (or right)

2(0)

1(2)Unbalanced node

3(1)“Heavy”right child

Rotate heavychild right

3(0)

2(1)

1(2)

3(0)1(0)

2(1)

Rotate unbalanced

node left

Page 18: CS261 Data Structures

Case 1: Single Rotation (another view)

1

2

1

2

• Have a node (2) that is heavy on the left (1)

• Operation makes (2) unbalanced and that heavy child heavy on left

After Insertion

Page 19: CS261 Data Structures

Case 1: Single Rotation

1

2

2

1

• Single rotation fixes the problem

Single Rotation

Page 20: CS261 Data Structures

Case 2: Double Rotation

1

3

1

3

• Have a node (3) with a heavy left child (1)

• Operation makes (3) unbalanced and (1) is heavy on the right

After Deletion

2 2

Page 21: CS261 Data Structures

Case 2: Double Rotation

1

3

• First, rotate heavy child (1) to the left

After Rotation 1

2 1

3

2

Page 22: CS261 Data Structures

Case 2: Double Rotation

• Next, rotate unbalanced node (3) to the right

After Rotation 2

1

3

2 1 3

2

Page 23: CS261 Data Structures

AVL Trees: Balacing Pseudocode

Balancing pseudocode (to rebalance an unbalanced node):If left child is tallest (by more than 1):If left child is heavy on the right side: // Double rotation needed.

Rotate the left child to the leftRotate unbalanced “top” node to the rightElse if right child is tallest(by more than 1) If right child is heavy on the left side: // Double rotation needed.

Rotate the right child to the rightRotate unbalanced “top” node to the left

Return new “ top” node

Page 24: CS261 Data Structures

Rotations

• Can be the result of additions or removals• All cases hold for the “right” side as well, just

replace all lefts with rights and all rights with lefts

Page 25: CS261 Data Structures

3(3)

9(0)1(0)

8(2)2(1)

4(0)

5(1)

6(0)

More Examples…

Add data: 7

Balanced Tree

“Heavy” leftchild

Unbalanced Tree

3(4)

9(0)1(0)

8(3)2(1)

4(0)

5(2)

7(0)

6(1)

Added to right sideof heavy left child

Unbalanced“top”node

Page 26: CS261 Data Structures

Tree Still Unbalanced

3(4)

9(0)1(0)

8(3)2(1)

4(0)

5(2)

7(0)

6(1)

Single rotation

AVL Trees: Double Rotation Example

Unbalanced Tree

3(4)

1(0)

2(1)

7(0)

6(1) 9(0)

8(2)

5(3)

4(0)

Unbalanced“top” node

(still)

Page 27: CS261 Data Structures

Tree Still Unbalanced, but …

Rotate heavy child

AVL Trees: Double Rotation Example

“Heavy” leftchild

3(4)

9(0)1(0)

8(3)2(1)

4(0)

5(1) 7(0)

6(2)

3(4)

9(0)1(0)

8(3)2(1)

4(0)

5(2)

7(0)

6(1)

Unbalanced Tree

Page 28: CS261 Data Structures

Tree Now Balanced

Rotate top node

AVL Trees: Double Rotation Example

Unbalanced Tree(after 1st rotation)

3(3)

1(0)

2(1)

7(0)

3(4)

9(0)1(0)

8(3)2(1)

4(0)

5(1) 7(0)

6(2)Unbalanced“top” node

4(0)

5(1)

6(2)

9(0)

8(1)

Page 29: CS261 Data Structures

Your Turn

• Worksheet: AVL Practice