avl trees - it collegeenos.itcollege.ee/~jpoial/algorithms/gt/goodrich_6e_ch11_avltree… · avl...
TRANSCRIPT
AVL Trees 3/20/14
1
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 1
AVL Trees 6
3 8
4
v
z
Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and M. H. Goldwasser, Wiley, 2014
© 2014 Goodrich, Tamassia, Goldwasser 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
AVL Trees 3/20/14
2
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 3
Height of an AVL Tree Fact: The height of an AVL tree storing n keys is O(log n). Proof (by induction): 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) = 2 ! For 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). So
n(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) +2 ! Thus the height of an AVL tree is O(log n)
3
4 n(1)
n(2)
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 4
Insertion ! Insertion is as in a binary search tree ! Always done by expanding an external node. ! Example:
44
17 78
32 50 88
48 62
54 w
b=x
a=y
c=z
44
17 78
32 50 88
48 62
before insertion
after insertion
AVL Trees 3/20/14
3
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 5
Trinode Restructuring ! Let (a,b,c) be the inorder listing of x, y, z ! Perform 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
T3 b=x
c=y a=z
T0 T1 T2 T3
Double rotation around c and a
Single rotation around b
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 6
Insertion Example, continued
88
44
17 78
32 50
48 62
2
5
1
1
3
4
2
1
54
1
T0 T2
T3
x
y
z
2
3
4
5
67
1
The image cannot be displayed. Your compu
88
44
17 78 32 50
48
62 2
4
1 1
2 2
3
1 54 1
T 0 T 1
T 2
T 3
x y z
unbalanced...
...balanced 1
23
4
5
6
7
T 1
AVL Trees 3/20/14
4
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 7
Restructuring (as Single Rotations) ! Single Rotations:
T0T1
T2T3
c = xb = y
a = z
T0 T1 T2T3
c = xb = y
a = zsingle rotation
T3T2
T1T0
a = xb = y
c = z
T0T1T2T3
a = xb = y
c = zsingle rotation
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 8
Restructuring (as Double Rotations) ! double rotations:
double rotationa = z
b = xc = y
T0T2
T1T3 T0
T2T3T1
a = zb = x
c = y
double rotationc = z
b = xa = y
T0T2
T1T3 T0
T2T3 T1
c = zb = x
a = y
AVL Trees 3/20/14
5
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 9
Removal ! Removal 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
78 32 50
88 48
62
54
44
17
78 50
88 48
62
54
before deletion of 32 after deletion
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 10
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 a trinode restructuring 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
78 50
88 48
62
54
w
c=x
b=y
a=z
44
17
78
50 88
48
62
54
AVL Trees 3/20/14
6
© 2014 Goodrich, Tamassia, Goldwasser AVL Trees 11
AVL Tree Performance ! AVL tree storing n items
n The data structure uses O(n) space
n A single restructuring takes O(1) time w using a linked-structure binary tree
n Searching takes O(log n) time w height of tree is O(log n), no restructures needed
n Insertion takes O(log n) time w initial find is O(log n)
w restructuring up the tree, maintaining heights is O(log n)
n Removal takes O(log n) time w initial find is O(log n) w restructuring up the tree, maintaining heights is O(log n)
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation
AVL Trees 12
AVL Trees 3/20/14
7
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation, 2
AVL Trees 13
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation, 3
AVL Trees 14