7.8.4 Starting at a Found Node |
|
The code for this function is derived with few changes from
<TBST search function 253>.
272. <TBST traverser search initializer 272> =
void *
tbst_t_find (struct tbst_traverser *trav, struct tbst_table *tree, void *item)
{
struct tbst_node *p;
assert (trav != NULL && tree != NULL && item != NULL);
trav->tbst_table = tree;
trav->tbst_node = NULL;
p = tree->tbst_root;
if (p == NULL)
return NULL;
for (;;)
{
int cmp, dir;
cmp = tree->tbst_compare (item, p->tbst_data, tree->tbst_param);
if (cmp == 0)
{
trav->tbst_node = p;
return p->tbst_data;
}
dir = cmp > 0;
if (p->tbst_tag[dir] == TBST_CHILD)
p = p->tbst_link[dir];
else
return NULL;
}
}
This code is included in 268.
7.8.3 Starting at the Last Node
|
7.8 Traversal
|
7.8.5 Starting at an Inserted Node
|