balanced binary search trees - university of...
TRANSCRIPT
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 1
AVL Trees6
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, GoldwasserAVL 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
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 3
Height of an AVL TreeFact: 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) = 2For n > 2, an AVL tree of height h contains the root node, one AVL subtree of height h-1 and another of height h-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)
3
4 n(1)
n(2)
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 4
Height of an AVL TreeFact: 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.
.....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)
Choose i=h/2-1, then we have 2h/2-1n(h-2(h/2-1))=2h/2-1n(2)
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)
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 5
InsertionInsertion 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
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 6
Trinode RestructuringLet (a,b,c) be the inorder listing of x, y, zPerform the rotations needed to make b the topmost node of the three
b=y
a=z
c=xT0
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
Double rotation around c and a
Single rotation around b
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 7
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
12
3
4
5
6
7
T1
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 8
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
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 9
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
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 10
RemovalRemoval 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
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 11
Rebalancing after a RemovalLet 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
7850
8848
62
54
w
c=x
b=y
a=z
44
17
78
50 88
48
62
54
© 2014 Goodrich, Tamassia, GoldwasserAVL Trees 12
AVL Tree PerformanceAVL tree storing n items
The data structure uses O(n) space A single restructuring takes O(1) time
using a linked-structure binary tree
Searching takes O(log n) time height of tree is O(log n), no restructures needed
Insertion takes O(log n) time initial find is O(log n) restructuring up the tree, maintaining heights is O(log n)
Removal takes O(log n) time initial find is O(log n) restructuring up the tree, maintaining heights is O(log n)
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation
AVL Trees 13
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation, 2
AVL Trees 14
© 2014 Goodrich, Tamassia, Goldwasser
Java Implementation, 3
AVL Trees 15