* splay-tree.c (splay_tree_remove): New.
This commit is contained in:
parent
2664c1f9fa
commit
afe36a788b
@ -1,3 +1,7 @@
|
|||||||
|
2000-04-05 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* splay-tree.c (splay_tree_remove): New.
|
||||||
|
|
||||||
Thu Mar 16 01:33:58 2000 Jeffrey A Law (law@cygnus.com)
|
Thu Mar 16 01:33:58 2000 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
* Makefile.in (partition.o): Depend on config.h
|
* Makefile.in (partition.o): Depend on config.h
|
||||||
|
@ -309,6 +309,47 @@ splay_tree_insert (sp, key, value)
|
|||||||
return sp->root;
|
return sp->root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove KEY from SP. It is not an error if it did not exist. */
|
||||||
|
|
||||||
|
void
|
||||||
|
splay_tree_remove (sp, key)
|
||||||
|
splay_tree sp;
|
||||||
|
splay_tree_key key;
|
||||||
|
{
|
||||||
|
splay_tree_splay (sp, key);
|
||||||
|
|
||||||
|
if (sp->root && (*sp->comp) (sp->root->key, key) == 0)
|
||||||
|
{
|
||||||
|
splay_tree_node left, right;
|
||||||
|
|
||||||
|
left = sp->root->left;
|
||||||
|
right = sp->root->right;
|
||||||
|
|
||||||
|
/* Delete the root node itself. */
|
||||||
|
if (sp->delete_value)
|
||||||
|
(*sp->delete_value) (sp->root->value);
|
||||||
|
free (sp->root);
|
||||||
|
|
||||||
|
/* One of the children is now the root. Doesn't matter much
|
||||||
|
which, so long as we preserve the properties of the tree. */
|
||||||
|
if (left)
|
||||||
|
{
|
||||||
|
sp->root = left;
|
||||||
|
|
||||||
|
/* If there was a right child as well, hang it off the
|
||||||
|
right-most leaf of the left child. */
|
||||||
|
if (right)
|
||||||
|
{
|
||||||
|
while (left->right)
|
||||||
|
left = left->right;
|
||||||
|
left->right = right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sp->root = right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Lookup KEY in SP, returning VALUE if present, and NULL
|
/* Lookup KEY in SP, returning VALUE if present, and NULL
|
||||||
otherwise. */
|
otherwise. */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user