We study several alternative data structures based on trees for
realizing ordered dictionary.
The fundamental operations in an ordered dictionary ADT are:
find(k) - Return the
position of an item with key k,
and return a null position if no such item exists.
findAll(k) - Return an
iterator of positions for all items with key k.
insertItem(k,e) - Inserts an
item with element e and key k.
removeElement(k) - Remove an
item with key k. An error condition occurs if
there is no such item.
removeAllElements(k) - Remove all
items with key equal to k.
closestBefore(k)-
Return a position of an item with the largest key less than or
equal to k.
closestAfter(k)
- Return a position of an item with the smallest key greater
than or equal to k.
9.1 Binary Search Trees (reminder)
A binary search tree is a binary tree storing keys (or
key-element pairs) at its internal nodes and satisfying the
following property:
Let u, v, and w be three nodes such
that u is in the
left subtree of v
and w is in the
right subtree of v.
We have key(u) ≤ key(v) ≤ key(w)
External nodes do not store items
Inorder traversal visits the keys of its dictionary in
non-decreasing order.
9.1.1 Searching
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 leaf, the key is not found and we return a
null position
Algorithmfind (k, v)
if T.isExternal (v)
return Position(null)
if k < key(v)
return find(k,
T.leftChild(v))
else if k = key(v)
return Position(v)
else {
k > key(v) }
return find(k, T.rightChild(v))
Example: find(4)
Analysis of Binary Tree Searching
Function find(k)
on dictionary D runs
O(h) time, where h is the height of the
binary search tree T
used to implement D.
9.1.2 Update Operations
Insertion
To perform operation insertItem(k, e),
we search for key k
Assume k is not
already in the tree, and 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
Removal
To perform operation removeElement(k), we search for key k
Assume key k is
in the tree, and let let v
be the node storing k
If node v has a
leaf child w, we
remove v and w from the tree with
operation removeAboveExternal(w)
Example: remove 4
We consider the case where the key k to be removed is stored
at a node v whose
children are both
internal
we find the internal node w that follows v in an inorder traversal
we copy key(w) into node v
we remove node w
and its left child z
(which must be a leaf) by means of operation removeAboveExternal(z)
Example: remove 3
Best-case versus Worst-case
Consider a dictionary with n items implemented by means of a binary
search tree of height h
the space used is O(n)
methods findElement(),
insertItem()
and removeElement()
take O(h) time
The height is O(n) in the worst case and
O(log n) in the best case