Download Search/Insert Properties of BSTs

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Linked list wikipedia , lookup

Lattice model (finance) wikipedia , lookup

Quadtree wikipedia , lookup

Interval tree wikipedia , lookup

Red–black tree wikipedia , lookup

Binary tree wikipedia , lookup

B-tree wikipedia , lookup

Binary search tree wikipedia , lookup

Transcript
EECS 281: Data Structures and Algorithms
AVL Trees
Search/Insert
„
„
„
Retrieval of a particular piece of information
from large volumes of previously stored data
Purpose is typically to access information
within the item (not just the key)
Recall that arrays, linked lists are worst- case
O(N) for either searching or inserting
Need data structure with optimal
efficiency for searching and inserting
Properties of BSTs
„
„
„
Best case (balanced): about lg N nodes
between root and each external node/leaf
Worst case (unbalanced): about N nodes
between root and each external node/leaf
With random data:
– trees are likely to be well-balanced on average
1
AVL Tree
named for Adelson, Velskii, and Landis
„
„
Change worst case search/insert to
O(lgN)
Height Balance Property
– for every internal node v of T, the heights
of the children of v differ by at most 1
– note recursive definition
Search (same as BST)
To search for a key k,
we trace a downward
path starting at the root
The next node visited
depends on the outcome
of the comparison of k
with the key of the
current node
If we reach a nonmatching leaf, the key is
not found and we return
a null position
Example: search(4,root)
„
„
„
„
Algorithm search (k, v)
if T.isExternal(v) // not found
return Position(null)
if k < key(v)
return search(k, T.leftChild(v))
else if k = key(v)
return Position(v)
else // k > key(v)
return search(k, T.rightChild(v))
6
<
2
1
9
>
4 =
8
Sort (same as BST)
Inorder Traversal
Algorithm inorder(T,v)
for left child w of v do
inorder(T,w)
visit node v
for right child x of v do
inorder(T,x)
„
simply stated, sorting an AVL tree is an inorder traversal of
the AVL tree
2
Inserting into AVL Trees
„
„
Each node records its height
Can compute a node’s balance factor
– bal(n) = height(n
- >left) – height(n
- >right)
„
A node that is AVL-balanced:
– bal(n) = 0: both subtrees equal
– bal(n) = +1: left taller by one
– bal(n) = –1: right taller by one
„
|bal(n)| > 1: node is out of balance
Balance Factors
-2
-2
+1
-1
0
0
Insertion (begins like BST)
„
„
„
„
To perform operation
insert(k, e), we search for
key k
Assume k is not already in
the tree, and let let w be the
leaf reached by the search
We insert k at node w and
expand w into an internal
node
Example: insert(5,e)
6
<
2
9
>
1
4
8
>
w
6
2
1
9
4
8
5
w
3
Insertion (con’t)
„
2
– node v of T is balanced if
∆|height(children(v))| ≤ 1
„
„
6
<
Check for ‘balance’ after
insertion, where balance:
9
>
1
4
If balanced after insertion,
then done
Else, rotate to re-balance
8
>
w
6
2
9
1
4
8
5
w
Pop Quiz
„
AVL-balance the following two trees:
(hint: think rotations)
A
A
C
B
C
B
Insertion (con’t)
Four Cases (page 431)
„ single left rotation (case a)
– RL(a)
„
single right rotation (case b)
„
double rotation (case c)
– RR(c)
– RR(c)
– RL(a)
„
double rotation (case d)
– RL(a)
– RR(c)
4
Checking and Balancing
checkAndBal(node *n)
if bal(n) > +1
if bal(n->left) < 0
rotL(n->left)
rotR(n)
else if bal(n) < -1
if bal(n->right) > 0
rotR(n->right)
rotL(n)
„
Outermost if:
is node out of
balance?
> +1: left too big
< -1: right too big
„
Inner ifs:
do we need a double
rotation?
only if signs disagree
Summary: AVL Trees
„
Binary Search Tree
„
AVL Tree
– worst case insertion/search is O(N)
– worst case insertion/search is O(lg N)
– must guarantee height balance property
„
Operations
–
–
–
–
search: same as BST, but O(lg N)
sort: same as BST, with O(N)
insert: may have to rebalance
delete: may have to rebalance
5