avl trees

37
AVL Trees AVL Trees

Upload: ishonp98

Post on 12-Dec-2014

160 views

Category:

Education


8 download

DESCRIPTION

Learn About AVL trees And rotations

TRANSCRIPT

Page 1: AVL Trees

AVL TreesAVL Trees

Page 2: AVL Trees

RecallRecall

Motivation:Motivation: Linked lists and queues work well enough for most applications, but provide slow service for large data sets.

835835835835 83783783783744443333

Ordered insertion takes too long for large sets.

836836836836

Page 3: AVL Trees

Solution: TreesSolution: Trees

4444

6666

7777

9999

1111

999944441111 6666 7777

Binary Trees provide quick access to data

O (logN)vs

O (N)

O (logN)vs

O (N)

Page 4: AVL Trees

0

5

105

10

15

15 20

O(log N)

O(N)

O(N2)

# Items

# S

tep

s

Why itmatters

Why itmatters

Page 5: AVL Trees

Trees: BalanceTrees: Balance4444

6666

7777

9999

1111

12121212

17171717

Consider animbalanced Binary Search Tree. Search performancedegrades back into a linked list.

The promisedO(log N) will approach O(N).

Page 6: AVL Trees

4444

6666

7777

9999

1111

12121212

17171717

BalanceBalance

If we had someway of keeping the tree “in balance”, our searches would be closer to O(log N)

But how does one measure balance?

Page 7: AVL Trees

4444

6666

7777

9999

1111

12121212

17171717

4444

6666

7777

9999

1111

12121212

17171717

1

2

3

4

5

Measuring “Balance”Measuring “Balance”

…but the height alone does notgive us a indication of imbalance

Perhaps wemeasurethe height...

Page 8: AVL Trees

Balance: The KeyBalance: The Key

4444

6666

7777

9999

1111

12121212

17171717

4444

6666

7777

9999

1111

12121212

17171717

Subtree’s rightchild too tall forits sibling

Balance is a relative property, not an absolute measure...

…as withall things.

Page 9: AVL Trees

Measuring “Balance”Measuring “Balance”Adelson-Velskii and Landis suggested that, since trees may be defined recursively, balance may also be determined recursively.

4444

6666

7777

9999

1111

12121212

17171717

Internal nodes are also roots of subtrees.

If each node’s subtree has a similar height, the overall tree is balanced

Page 10: AVL Trees

Measuring BalanceMeasuring Balance

4444

6666

7777

9999

1111

12121212

17171717

9999

HH-1

H-2

Thus, the actual numerical height does not determine balance; rather, it’s the relativerelative height of both subtrees.

Balanced Tree Test:Balanced Tree Test: subtrees differ in height by no more than one. This recursively holds true for all nodes!

Page 11: AVL Trees

Balance FactorBalance FactorTo measure the balance of a node, there are two steps:

Record the node height (NH)--an absolute numeric measure

Record the node’s balance factor (BF)--a relative measure

The node height alone does not indicate balance: we have to compare it to the height of other nodes.

Page 12: AVL Trees

Node / Tree HeightNode / Tree Height

9999 4444

6666

77771111

12121212

17171717

Tree height is easy, Here are three trees.

Height?Height?

H=1

H=2

H=3

STEP 1

STEP 1

Page 13: AVL Trees

Node / Tree Heights for AVLsNode / Tree Heights for AVLs

By convention, a null reference will return aheight of zero (0).

Therefore:The Balance Factor of 12121212

is Ht of minus (0)17171717

= 1 – (0) = +1

12121212

17171717

00

0

Page 14: AVL Trees

Balance FactorBalance Factor

Remember that balance is relativerelative.

So we define the Balance Factor (BF) at:

BF = (right subtree height - left subtree height)

4444

6666

777711119999 12121212

17171717

0

0

+1

-1

0

0

+1

STEP 2

STEP 2

Page 15: AVL Trees

Balance FactorBalance Factor

4444

6666

7777

9999

1111

12121212

171717174444

6666

7777

9999

1111

12121212

17171717

0

-10 0

+1+1

-1

Each node has a balance factor. Remember,it’s based on (right ht - left ht).

(We will note BF outside the node, to avoid confusion with the key values. Some texts don’t even give the keys, because values are irrelevant once you have a proper BST.)

Page 16: AVL Trees

Quiz YourselfQuiz Yourself

Calculate the balance factor for each node ineach tree:

4444

6666

7777

9999

1111

4444

16161616

7777

9999

1111

12121212

17171717

44449999

44449999

12121212

Page 17: AVL Trees

Quiz Yourself- AnsQuiz Yourself- AnsCalculate the balance factor for each node in each tree:

3333

1111

2222

4444

1111

2222

1111

1111

4444

1111

3333

2222

11112222

11112222

1111

-1

0 -1

1

-3

-1

2

1

Here, the height is written inside the node, covering the key value it holds.

Hopefully, this graphical clue helps.

Page 18: AVL Trees

Using Balance FactorsUsing Balance Factors

How do the Balance Factors help?

Recall: Adelson-Velskii and Landisused a recursive definitionof trees. Our BF measureis likewiserecursive.

If any BF is > +1 or < -1, there’s imbalance

4444

6666

7777

9999

1111

12121212

17171717

0

-10 0

+1+1

-1

4444

7777

9999

111100

0

-2

Balanced

NotBalanced

Page 19: AVL Trees

AVL’s “Weak” BalancingAVL’s “Weak” Balancing• A fully balanced tree guarantees that, for nodes on each level, all

left and right subtrees have the same height, and imposes this recursively.

• AVL trees use a weaker balance definition which still maintains the logarithmic depth requirement:

– for any node in an AVL tree, the height of the left and right nodes differs by at most 1.

• For example, this is a valid AVL tree, but not strictly balanced:

8888

6666

10101010

12121212

4444

16161616

1717171722

Page 20: AVL Trees

Addressing ImbalanceAddressing Imbalance

If we build a tree from scratch, and check nodes for imbalance after a new insertion, we can guard against imbalance.

Q:Q: So what do we do when the tree is unbalanced?

A:A: Rotate the tree.

Page 21: AVL Trees

Identifying Offending ScenariosIdentifying Offending ScenariosThe key to fixing an unbalanced tree is knowing what caused it to break. Let’s inductively look at what can cause a good tree to go bad.

Given an AVL balanced tree:

44449999 -1

0Two possible left insertions could break balance:

Insertion toleft subtreeof left child

0

44449999

1111

-1

-2#1

Insertion toright subtreeof left child

0

4444

7777

9999+1

-2#2

Page 22: AVL Trees

PatternsPatternsof Problemsof ProblemsInsertion to

left subtreeof left child 4444

9999

1111

-1

-2

0

#1

Insertion toright subtreeof left child

4444

7777

9999

+1

-2

0

#2

#3

Insertion toleft subtreeof right child

111111119999

10101010

-1

+2

0

… and the mirror of these insertions

111111119999

13131313

+1

+2

0

Insertion toright subtreeof right child

#4

Page 23: AVL Trees

11111111

9999

13131313

+1

+2

0

Insertion toright subtreeof right child

#4#3

Insertion toleft subtreeof right child

11111111

9999

10101010

-1

+2

0

Insertion toleft subtreeof left child 4444

9999

1111

-1

-2

0

#1

Insertion toright subtreeof left child

4444

7777

9999

+1

-2

0

#2

Given our recursive definition of trees, we know these four scenarios are complete. The same insertion into a larger AVL balanced tree does not create a new category.

H

4444

9999

H-1

H+1

-2

Imbalance foundImbalance foundregardless of heightregardless of height

matchesmatches

(H-1) - (H+1) = -2

Page 24: AVL Trees

11111111

9999

13131313

+1

+2

0

Insertion toright subtreeof right child

#4#3

Insertion toleft subtreeof right child

11111111

9999

10101010

-1

+2

0

Insertion toleft subtreeof left child 4444

9999

1111

-1

-2

0

#1

Insertion toright subtreeof left child

4444

7777

9999

+1

-2

0

#2

Let’s look at two Let’s look at two insertions thatinsertions that

cause imbalance. cause imbalance. Recall they are Recall they are

mirrors.mirrors.

They both deal with They both deal with “outside” insertions “outside” insertions on the tree’s exterior on the tree’s exterior face: the left-left and face: the left-left and right-right insertions.right-right insertions.

Page 25: AVL Trees

Single RotationSingle Rotation

111111119999

13131313

+1

+2

0

Insertion toright subtreeof right child

#4

Insertion toleft subtreeof left child

0

44449999

1111

-1

-2#1These insertions can be cured by swapping parent and child . . .

. . . provided you maintain search order. (An AVL tree is a BST)

Page 26: AVL Trees

Single Rotation: RightSingle Rotation: Right

Insertion toleft subtreeof left child 0

44449999

1111

-1

-2#1

04444

999911110

0

A single rotation round the A single rotation round the unbalanced node restores AVL unbalanced node restores AVL balance in all casesbalance in all cases

XXXX

WWWW

AB

A

C

WWWW

XXXX

BA C

Page 27: AVL Trees

9999

Think of rotations - Imagine the joints at the ‘4’ node starting to flex and articulate.

4444

1111 9999

9999

44449999

1111 9999

4444

1111

Page 28: AVL Trees

#4

011111111

1313131399990

0

111111119999

13131313

+1

+2

0

A similar rotation is used for right-rightinsertions that cause an imbalance

Insertion toright subtreeof right child

Single Rotation: LeftSingle Rotation: Left

XXXXWWWW

AB

C

WWWW

XXXX

CBA

Page 29: AVL Trees

1111

Word of cautionWord of caution

The single rotations are simple, but you have to keep track of child references.

33334444

11116666

7777

999911111111

14141414

5555

X

W

CB

A

44446666

33337777

5555

999911111111

14141414W

AB

C

X

Page 30: AVL Trees

11111111

9999

13131313

+1

+2

0

Insertion toright subtreeof right child

#4#3

Insertion toleft subtreeof right child

11111111

9999

10101010

-1

+2

0

Insertion toleft subtreeof left child 4444

9999

1111

-1

-2

0

#1

Insertion toright subtreeof left child

4444

7777

9999

+1

-2

0

#2

Let’s look at theLet’s look at theother two insertionsother two insertionscausing problems. causing problems.

Recall they are Recall they are mirrors.mirrors.

They both deal with They both deal with “inside” insertions on “inside” insertions on

the tree’s interior:the tree’s interior:right-left and left-rightright-left and left-right

Page 31: AVL Trees

Insertion toright subtreeof left child

0

4444

7777

9999+1

-2#2

#3

Insertion toleft subtreeof right child

111111119999

10101010

-1

+2

0

Double RotationDouble Rotation

These insertions are not solved with a single rotation.

Instead, two single rotations, left-right and right-left are performed.

Page 32: AVL Trees

Why Doesn’t Single Rotation Work?Why Doesn’t Single Rotation Work?

WWWWXXXX

AB

C

XXXX

WWWW

A

BC

SingleSingleRightRight

RotationRotationAttemptedAttempted

Unbalanced insertions into the “interior” of the tree remain unbalanced with only a single rotation

Page 33: AVL Trees

#3

Insertion toleft subtreeof right child

111111119999

10101010

-1

+2

0

Double RotationDouble Rotation

YYYY WWWW

A B C

XXXX

D

010101010

1111111199990

0

(trivial case)

XXXX

A

B C

YYYY

D

WWWW

Page 34: AVL Trees

#4

Insertion toright subtreeof left child

Double RotationDouble Rotation

WWWW YYYY

A B C

XXXX

D

07777

999944440

0

0

4444

7777

9999+1

-2

WWWWXXXX

AB C

YYYY

D

Page 35: AVL Trees

MagicMagic

Step?Step?

Double RotationDouble Rotation

5555

4444

7777

3333

8888

6666

9999

11111111

14141414W

A

B

D

Y

4444

6666

3333

7777

5555

9999

11111111

14141414W

A

B

X

8888D

X

Y

Solved: Move up X! W becomes X’s left child Y becomes X’s right child W’s right child becomes X’s left child X’s right child (if any) becomes Y’s left child

Page 36: AVL Trees

Double Rotation StrategyDouble Rotation Strategy

4444

7777

9999

A

B C

D

44447777

9999

A B

C

D

SLRSLR

at 4at 4 44447777

9999

A B C D

SRRSRR

at 9at 9

On a left-right insert, we first rotate left

This places the tree in a position for which we already have a working solution. (Code reuse!)

Double left rotate =Double left rotate =single left rot + single right rotsingle left rot + single right rot

Page 37: AVL Trees

Double Rotation StrategyDouble Rotation Strategy

11111111

10101010

9999

A

B C

D

10101010

11111111

9999

A

B

C D

SRRSRR

at 11at 11 999910101010

11111111

A B C D

SLRSLR

at 9at 9

Similarly, we perform a right and left rotation oninsertions that went left-right. The first rotation reforms the tree into an exterior imbalance. We already have a way of fixing this: single left rotations