10.6.3 Starting at a Found Node |
|
To start from an item found in the tree, we use the same algorithm as
rtbst_find().
398. <RTBST traverser search initializer 398> =
void *
rtbst_t_find (struct rtbst_traverser *trav, struct rtbst_table *tree,
void *item)
{
struct rtbst_node *p;
assert (trav != NULL && tree != NULL && item != NULL);
trav->rtbst_table = tree;
trav->rtbst_node = NULL;
p = tree->rtbst_root;
if (p == NULL)
return NULL;
for (;;)
{
int cmp = tree->rtbst_compare (item, p->rtbst_data, tree->rtbst_param);
if (cmp == 0)
{
trav->rtbst_node = p;
return p->rtbst_data;
}
if (cmp < 0)
{
p = p->rtbst_link[0];
if (p == NULL)
return NULL;
}
else
{
if (p->rtbst_rtag == RTBST_THREAD)
return NULL;
p = p->rtbst_link[1];
}
}
}
This code is included in 395.
10.6.2 Starting at the Last Node
|
10.6 Traversal
|
10.6.4 Advancing to the Next Node
|