ppt

advertisement
AVL Trees
Drozdek Section 6.7.2
pages 257 -262
1
Objectives

You will be able to



Describe an AVL tree.
Describe the operations by which an AVL
tree is maintained as nearly balanced as
items are added.
Add a new node to the diagram of an AVL
tree.
2
Tree Balancing

Consider a BST of state abbreviations.

If the states are entered in the order
NY, IL, GA, RI, MA, PA, DE, IN, VT, TX, OH, WY.
the tree will be balanced.

When tree is nicely balanced, search time is O(log2n)
3
Tree Balancing: AVL Trees

If abbreviations entered in increasing order
DE, GA, IL, IN, MA, MI, NY, OH, PA, RI, TX, VT, WY
BST degenerates into linked list with search time O(n)
4
AVL Tree
A height balanced tree

Tree is rebalanced after additions and deletions
make it skewed beyond a certain limit.

Search time is O(log2n)

http://en.wikipedia.org/wiki/AVL_tree

Named after its two inventors:


G.M. Adelson-Velskii and E.M. Landis
Adelson-Velskii, G.; E. M. Landis (1962). "An algorithm for the organization of
information". Proceedings of the USSR Academy of Sciences 146: 263–266.
(Russian) English translation by Myron J. Ricci in Soviet Math. Doklady,
3:1259–1263, 1962.
5
Balance Factor

The Balance Factor of a node is defined as
height of its left subtree minus height of its
right subtree.




Note: Some authors define balance factor as right - left.
Drozdek defines balance factor as right - left.
Examples in this presentation are from a different book.
A balance factor with absolute value greater than 1 is
unacceptable for an AVL tree.
6
AVL Tree Definition

Defined as



Binary search tree
Balance factor of each node is 0, 1, or -1
Key is to rebalance the tree whenever an insertion or a deletion
creates a balance factor with absolute value greater than 1 at
any node.
7
AVL Tree as an ADT


The differences between an AVL tree and the
Binary Search Tree that we have studied
previously are purely internal.
As seen from the outside they are identical.
8
Examples: AVL Trees
Numbers in the circles are the balance factors,
not the values stored in the nodes.
Nyhoff page 841
9
Examples: Not AVL Trees
Nyhoff page 841
10
AVL Trees

Insertions may require adjustment of the tree
to maintain balance.

Given tree
Insert DE

Becomes unbalanced
Requires a right rotation on subtree RI

Producing balanced tree

11
Observation

Inserting a new item into an AVL tree can
result in a subtree having a balance factor
(absolute value) greater than 1.


Inserting a new item does not necessarily
increase the balance factor.



But no more than 2.
May leave it unchanged.
May decrease it.
If the balance factor is unacceptable after an
insertion, it can be fixed by one of four possible
rebalancing rotations.
12
Examples

Let’s look at how we can rebalance the
tree while adding states.


We will add states to the tree in the order RI, PA,
DE, GA, OH, MA, IL, MI, IN, NY, VT, TX, WY
Start by adding RI to an empty tree.
13
Add PA
Tree is still balanced.
14
Add DE
Tree is now unbalanced.
A right rotation of RI will restore balance.
15
Rotations


AVL tree rotations rearrange links so as
to reduce the height of the larger subtree
at an unbalanced node.
They always preserve the BST invariants:


Everything in a node's left subtree is less
than or equal to it.
Everything in a node's right subtree is
greater than or equal to it.
16
Add GA
Tree is still balanced.
17
Add OH
The subtree rooted at DE is now unbalanced.
A left rotation of DE will restore balance.
18
Add MA
The subtree rooted at PA is now unbalanced.
We need to do a right rotation at PA.
But we can’t do that immediately with a simple
right rotation. We need to do a left rotation at GA
first.
This is a left-right rotation.
19
After Left Rotation at GA
Now we can do a right rotation at PA
obtaining a balanced tree.
20
Insert IL and MI
Tree is still balanced.
21
Insert IN
The subtree rooted at GA is now unbalanced.
Again we need a double rotation to restore balance.
Start with a right rotation at MA.
22
After Right Rotation at MA
Now we can do a left rotation at GA, restoring balance.
23
Insert NY
The subtree rooted at OH is now unbalanced.
We will need a left-right double rotation in the left
subtree of OH.
Notice what happens to IN!
24
After Left Rotation at IL
Now we can do a right rotation at OH, restoring balance.
25
Insert VT
Produces an inbalance at PA, which can be removed with a
simple left rotation to yield:
26
Insert TX and WY
This does not unbalance the tree, resulting in the final version.
27
Observations


When an unacceptable imbalance was produced, we
always did a rotation at the first ancestor of the added
node having an unacceptable imbalance.
We always rotated that node away from side with the
larger subtree height.



Its child with the larger subtree height takes its place and it
becomes a new child of that node.
If the first two steps from the first unblanced ancestor
toward the added node were in the same direction, a
single rotation restored balance.
Otherwise, a double rotation was necessary.
28
Rebalancing Rotations
1.
Single right rotation
2.
Single left rotation
3.
Left-right rotation
4.
Right-left rotation
Use when first unacceptably unbalanced ancestor has
a balance factor of +2 and the inserted item is in the
left subtree of its left child.
Use when first unacceptably unbalanced ancestor has
a balance factor of -2 and the inserted item is in right
subtree of its right child.
Use when first unacceptably unbalanced ancestor has
a balance factor of +2 and the inserted item is in the
right subtree of its left child.
Use when first unacceptably unbalanced ancestor has
a balance factor of -2 and the inserted item is in the
left subtree of its right child.
29
Single Right Rotation

Used when the nearest out of balance ancestor of the inserted
node has a balance factor of +2 (heavy to the left) and the
inserted node is in the left subree of its left child.



First two steps from ancestor to inserted node are both to the left.
Shown graphically on next slide.
Described in detail on the slide following that.
30
Single Right Rotation
Note that the right
subtree of B R(B)
flips over to become
the left subtree of A.
31
Single Right Rotation

Used when the nearest out of balance ancestor of the inserted
node has a balance factor of +2 (heavy to the left) and the
inserted node is in the left subree of its left child.
Let A = nearest out of balance ancestor of inserted item
B = left child of A



Set link from parent of A to point to B.
Set left link of A to point to the right child of B.
Set right link of B to point to A
32
Single Left Rotation


Symmetrical with single right rotation.
Exchange “right” and “left” in description
of single right rotation.
33
Single Left Rotation

Used when the nearest out of balance ancestor of the inserted
node has a balance factor of -2 (heavy to the right) and the
inserted node is in the right subree of its rightchild.
Let A = nearest out of balance ancestor of inserted item
B = right child of A



Set link from parent of A to point to B.
Set right link of A to point to the left child of B.
Set left link of B to point to A
34
Left-Right Rotation
Used when the nearest out of balance ancestor of the inserted
node has a balance factor of +2 (heavy to the left) and the
inserted node is in the right subree of its left child.




First two steps from ancestor to inserted node are in opposite
directions (left then right).
Shown graphically on following slides
Described in detail on slides following them.
35
Left-Right Rotation
Suppose we insert a new node into
the left subtree of C, increasing the
height of that subtree.
Nyhoff page 851
36
Left-Right Rotation
Do a left rotation at B
(left child of first out-of-balance ancestor of added node.)
37
Left-Right Rotation
Now do a right rotation at A.
Note that the left
subtree of C L(C)
flips over to become
the right subtree of B.
38
Left-Right Rotation
The right subtree of C
R(C) has become the
left subtree of A.
39
Left-Right Rotation
Used when the nearest out of balance ancestor of the inserted node
has a balance factor of +2 (heavy to the left) and the inserted
node is in the right subree of its left child.
Let A = nearest ancestor of the inserted item.
B = left child of A
C = right child of B
New item added to subtree rooted at C.
First do a left rotation of B and C.
1.
Set left link of A to point to C.
2.
Set right link of B equal to left link of C
3.
Set left link of C to point to B
Now a right rotation of A and C.
1.
Reset link from parent of A to point to C
2.
Set left link of A equal to right link of C
3.
Set right link of C to A
40
Right-Left Rotation


The Right-Left Rotation is symmetrical.
In the description of the Left-Right
rotation, exchange “right” and “left” .
41
Summary


Adding nodes to a binary tree can result in an
unbalanced tree.
But we can restore balance with one of four
kinds of rotations.




Single Left
Single Right
Left-Right
Right-Left
42
Exercise

Draw by hand, showing the tree after each step with
the balance factor at each node, as the following
values are added to an AVL tree of integers:



The resulting tree should be complete and balanced.
Repeat the exercise with the integers added in the
following order:


10 5 1 20 8 15 25
5 1 10 20 15 8 25
The final result should be the same, but some
intermediate results will be different.
43
Download