13.5.3 Starting at a Found Node |
|
To start from a particular item, we search for it in the tree. If it
exists then we initialize the traverser to it. Otherwise, we
initialize the traverser to the null item and return a null pointer.
There are no surprises here.
505. <PBST traverser search initializer 505> =
void *
pbst_t_find (struct pbst_traverser *trav, struct pbst_table *tree, void *item)
{
struct pbst_node *p;
int dir;
assert (trav != NULL && tree != NULL && item != NULL);
trav->pbst_table = tree;
for (p = tree->pbst_root; p != NULL; p = p->pbst_link[dir])
{
int cmp = tree->pbst_compare (item, p->pbst_data, tree->pbst_param);
if (cmp == 0)
{
trav->pbst_node = p;
return p->pbst_data;
}
dir = cmp > 0;
}
trav->pbst_node = NULL;
return NULL;
}
This code is included in 502 and 546.
13.5.2 Starting at the Last Node
|
13.5 Traversal
|
13.5.4 Starting at an Inserted Node
|