AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of...

23
AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance factor of every node x is – 1, 0, or 1 log 2 (n+1) <= height <= 1.44 log 2 (n+2)

Transcript of AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of...

Page 1: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

AVL Trees

• binary tree

• for every node x, define its balance factorbalance factor of x = height of left subtree of x

– height of right subtree of x

• balance factor of every node x is – 1, 0, or 1

• log2 (n+1) <= height <= 1.44 log2 (n+2)

Page 2: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Example AVL Tree

0 0

0 0

1

0

-1 0

1

0

-1

1

-110

7

83

1 5

30

40

20

25

35

45

60

Page 3: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

put(9)

0 0

0 0

1

0

-1 0

1

0

-1

1

-1

90

-1

0

10

7

83

1 5

30

40

20

25

35

45

60

Page 4: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

put(29)

0 0

0 0

1

0

0

1

0

-1

1

-110

7

83

1 5

30

40

20

25

35

45

60

29

0

-1

-1-2

RR imbalance => new node is in right subtree of right subtree of white node (node with bf = –2)

Page 5: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

0 0

0 0

1

0

0

1

0

-1

1

-110

7

83

1 5

30

40

2535

45

600

RR rotation. 20

029

put(29)

Page 6: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Insert/Put

• Following insert/put, retrace path towards root and adjust balance factors as needed.

• Stop when you reach a node whose balance factor becomes 0, 2, or –2, or when you reach the root.

• The new tree is not an AVL tree only if you reach a node whose balance factor is either 2 or –2.

• In this case, we say the tree has become unbalanced.

Page 7: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

A-Node

• Let A be the nearest ancestor of the newly inserted node whose balance factor becomes +2 or –2 following the insert.

• Balance factor of nodes between new node and A is 0 before insertion.

Page 8: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Imbalance Types

• RR … newly inserted node is in the right subtree of the right subtree of A.

• LL … left subtree of left subtree of A.

• RL… left subtree of right subtree of A.

• LR… right subtree of left subtree of A.

Page 9: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

LL Rotation

• Subtree height is unchanged.• No further adjustments to be done.

Before insertion.

1

0

A

B

BL BR

AR

h h

h

A

B

B’L BR

AR

After insertion.

h+1 h

h

B

A

After rotation.

BR

hAR

h

B’Lh+1

0

0

1

2

Page 10: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

LR Rotation (case 1)

• Subtree height is unchanged.• No further adjustments to be done.

Before insertion.

1

0

A

B

A

B

After insertion.

C

C

A

After rotation.

B

0

-1

2

0 0

0

Page 11: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

LR Rotation (case 2)

• Subtree height is unchanged.• No further adjustments to be done.

C

A

CR

h-1AR

h

1

0

A

B

BL

CR

AR

h

h-1

h

0

CL

h-1

C

A

B

BL

CR

AR

h

h-1

h

C’Lh

C

B

BL

hC’Lh

1

-1

2

0 -1

0

Page 12: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

LR Rotation (case 3)

• Subtree height is unchanged.• No further adjustments to be done.

1

0

A

B

BL

CR

AR

h

h-1

h

0

CL

h-1

C

A

B

BL

C’R

AR

h

h

h

CL

h-1

C-1

-1

2 C

A

C’Rh

AR

h

B

BL

hCL

h-1

1 0

0

Page 13: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Single & Double Rotations

• Single LL and RR

• Double LR and RL LR is RR followed by LL RL is LL followed by RR

Page 14: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

LR Is RR + LL

A

B

BL

C’R

AR

h

h

h

CL

h-1

C-1

-1

2

After insertion.

A

C

CL

C’R

AR

h

h

BL

h

B

2

After RR rotation.

h-1

C

A

C’Rh

AR

h

B

BL

hCL

h-1

1 0

0

After LL rotation.

Page 15: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Remove An Element

0 0

0 0

1

0

-1 0

1

0

-1

1

-110

7

83

1 5

30

40

20

25

35

45

60

Remove 8.

Page 16: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Remove An Element

0 0

0

2

0

-1 0

1

0

-1

1

-110

7

3

1 5

30

40

20

25

35

45

60

• Let q be parent of deleted node.

• Retrace path from q towards root.

q

Page 17: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

New Balance Factor Of q

• Deletion from left subtree of q => bf--.• Deletion from right subtree of q => bf++.• New balance factor = 1 or –1 => no change in height of

subtree rooted at q.• New balance factor = 0 => height of subtree rooted at q

has decreased by 1.• New balance factor = 2 or –2 => tree is unbalanced at q.

q

Page 18: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Imbalance Classification• Let A be an ancestor (q) of the deleted node

whose balance factor has become 2 or –2 following a deletion.

• Deletion from left subtree of A => type L.• Deletion from right subtree of A => type R.• Type R => new bf(A) = 2.• So, old bf(A) = 1.• So, A has a left child B.

bf(B) = 0 => R0. bf(B) = 1 => R1. bf(B) = –1 => R-1.

Page 19: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

R0 Rotation

• Subtree height is unchanged.• No further adjustments to be done.• Similar to LL rotation.

Before deletion.

1

0

A

B

BL BR

AR

h h

h

B

A

After rotation.

BR

hA’Rh-1

BL

h1

-1A

B

BL BR

A’R

After deletion.

h h

h-10

2

Page 20: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

R1 Rotation

• Subtree height is reduced by 1.• Must continue on path to root.• Similar to LL and R0 rotations.

Before deletion.

1

1

A

B

BL BR

AR

h h-1

h

B

A

After rotation.

BR

h-1A’Rh-1

BL

h0

0A

B

BL BR

A’R

After deletion.

h h-1

h-11

2

Page 21: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

R-1 Rotation

• New balance factor of A and B depends on b.• Subtree height is reduced by 1.• Must continue on path to root.• Similar to LR.

1

-1

A

B

BL

CR

AR

h-1

h

b

CL

C

A

B

BL

CR

A’R

h-1

h-1

CL

Cb

-1

2 C

A

CR A’Rh-1

B

BL

h-1CL

0

Page 22: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Number Of Rebalancing Rotations

• At most 1 for an insert.

• O(log n) for a delete.

Page 23: AVL Trees binary tree for every node x, define its balance factor balance factor of x = height of left subtree of x – height of right subtree of x balance.

Rotation Frequency

• Insert random numbers. No rotation … 53.4% (approx). LL/RR … 23.3% (approx). LR/RL … 23.2% (approx).