Avltrees 121106175039-phpapp01

19
AVL Trees 1 AVL Trees 6 3 8 4 v z

description

 

Transcript of Avltrees 121106175039-phpapp01

Page 1: Avltrees 121106175039-phpapp01

AVL Trees 1

AVL Trees6

3 8

4

v

z

Page 2: Avltrees 121106175039-phpapp01

AVL Trees 2

AVL Tree Definition

AVL trees are balanced.An AVL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at most 1.

88

44

17 78

32 50

48 62

2

4

1

1

2

3

1

1

An example of an AVL tree where the heights are shown next to the nodes:

Page 3: Avltrees 121106175039-phpapp01

  AVL Trees:

AVL trees were invented in 1962 by two Russian scientist G.M Adelson Velsky & E.M Landis.  Definition:

An AVL tree is a binary search tree in which the balance factor of every node, which is defined as the difference b/w the heights of the node’s left & right sub

trees is either 0 or +1 or -1 . Balance factor = ht of left sub tree – ht of right sub tree.ht=height

Page 4: Avltrees 121106175039-phpapp01

Example :

AVL tree BST ( not AVL tree ) 1 2

0 1 0 0 1 -1 0 1 -1

0 0 0 0

10

5 20

2

4 7

10

5 20

2

4

8

12

7

8

Page 5: Avltrees 121106175039-phpapp01

 

If an insertion of a new node makes an AVL tree unbalanced , we transform the tree by a rotation

 

Rotation : A Rotation in an AVL tree is a local

transformation of its sub tree rooted at a node whose balance has become either +2 or -2 ,if there are several such nodes, we rotate the tree rooted at the unbalanced node that is the closest to the newly inserted leaf.

Page 6: Avltrees 121106175039-phpapp01

  Types of rotations :

Totally there are four types of rotations

1. Single right rotation or R-rotation

2. Single left rotation or L-rotation

3. Double right-left rotation or RL-rotation

4. Double left-right rotation or LR-rotation

Page 7: Avltrees 121106175039-phpapp01

  Points to remember to select different rotation technique :

1.Straight line with positive unbalanced.apply Right rotation for unbalanced node.

+2 0

+1 0 0

0

5

2

452

4

Page 8: Avltrees 121106175039-phpapp01

 

2.Straight line with negative unbalanced.apply left rotation for unbalanced node.

-2 0

-1 0 0

0

5

7

675

6

Page 9: Avltrees 121106175039-phpapp01

 

3.Curved line with positive unbalanced.apply left-right rotation.

Right rotation for unbalanced node and left rotation for the nearest node.

+2 0

-1 0

0 0

5

2

4

52

4

Page 10: Avltrees 121106175039-phpapp01

 

4.Curved line with negative unbalanced.apply right-left rotation.

Left rotation for unbalanced node and right rotation for the nearest node.

-2 0

+1 0 0 0

5

7

8

85

7

Page 11: Avltrees 121106175039-phpapp01

AVL Trees 11

Height of an AVL TreeFact: The height of an AVL tree storing n keys is O(log n).Proof: Let us bound n(h): the minimum number of internal nodes of an AVL tree of height h.We easily see that n(1) = 1 and n(2) = 2For n > 2, an AVL tree of height h contains the root node, one AVL subtree of height n-1 and another of height n-2.That is, n(h) = 1 + n(h-1) + n(h-2)Knowing n(h-1) > n(h-2), we get n(h) > 2n(h-2). Son(h) > 2n(h-2), n(h) > 4n(h-4), n(h) > 8n(n-6), … (by induction),n(h) > 2in(h-2i)

Solving the base case we get: n(h) > 2 h/2-1

Taking logarithms: h < 2log n(h) +2Thus the height of an AVL tree is O(log n)

3

4 n(1)

n(2)

Page 12: Avltrees 121106175039-phpapp01

AVL Trees 12

Insertion in an AVL TreeInsertion is as in a binary search treeAlways done by expanding an external node.Example: 44

17 78

32 50 88

48 62

54w

b=x

a=y

c=z

44

17 78

32 50 88

48 62

before insertion after insertion

Page 13: Avltrees 121106175039-phpapp01

AVL Trees 13

Trinode Restructuringlet (a,b,c) be an inorder listing of x, y, zperform the rotations needed to make b the topmost node of the three

b=y

a=z

c=x

T0

T1

T2 T3

b=y

a=z c=x

T0 T1 T2 T3

c=y

b=x

a=z

T0

T1 T2

T3b=x

c=ya=z

T0 T1 T2 T3

case 1: single rotation(a left rotation about a)

case 2: double rotation(a right rotation about c, then a left rotation about a)

(other two cases are symmetrical)

Page 14: Avltrees 121106175039-phpapp01

AVL Trees 14

Insertion Example, continued

88

44

17 78

32 50

48 62

2

5

1

1

3

4

2

1

54

1

T0T2

T3

x

y

z

2

3

4

5

67

1

88

44

17

7832 50

48

622

4

1

1

2 2

3

154

1

T0 T1

T2

T3

x

y z

unbalanced...

...balanced

1

2

3

4

5

6

7

T1

Page 15: Avltrees 121106175039-phpapp01

AVL Trees 15

Restructuring (as Single Rotations)

Single Rotations:

T0T1

T2

T3

c = xb = y

a = z

T0 T1 T2

T3

c = xb = y

a = zsingle rotation

T3T2

T1

T0

a = xb = y

c = z

T0T1T2

T3

a = xb = y

c = zsingle rotation

Page 16: Avltrees 121106175039-phpapp01

AVL Trees 16

Restructuring (as Double Rotations)

double rotations:

double rotationa = z

b = xc = y

T0T2

T1

T3 T0

T2T3T1

a = zb = x

c = y

double rotationc = z

b = xa = y

T0T2

T1

T3 T0

T2T3 T1

c = zb = x

a = y

Page 17: Avltrees 121106175039-phpapp01

AVL Trees 17

Removal in an AVL TreeRemoval begins as in a binary search tree, which means the node removed will become an empty external node. Its parent, w, may cause an imbalance.Example:

44

17

7832 50

8848

62

54

44

17

7850

8848

62

54

before deletion of 32 after deletion

Page 18: Avltrees 121106175039-phpapp01

AVL Trees 18

Rebalancing after a Removal

Let z be the first unbalanced node encountered while travelling up the tree from w. Also, let y be the child of z with the larger height, and let x be the child of y with the larger height.We perform restructure(x) to restore balance at z.As this restructuring may upset the balance of another node higher in the tree, we must continue checking for balance until the root of T is reached

44

17

7850

8848

62

54

w

c=x

b=y

a=z

44

17

78

50 88

48

62

54

Page 19: Avltrees 121106175039-phpapp01

AVL Trees 19

Running Times for AVL Trees

a single restructure is O(1) using a linked-structure binary tree

find is O(log n) height of tree is O(log n), no restructures needed

insert is O(log n) initial find is O(log n) Restructuring up the tree, maintaining heights is O(log

n)

remove is O(log n) initial find is O(log n) Restructuring up the tree, maintaining heights is O(log

n)