if (Y->Color == Black && X != NIL)
DeleteFixup(tree, X, Parent);
-
+
/*
* The user structure in Y->Data MAY include a
* pointer to Y. In that case, we CANNOT delete
}
if (Y->Left->Parent == Z) Y->Left->Parent = Y;
if (Y->Right->Parent == Z) Y->Right->Parent = Y;
-
+
free(Z);
} else {
if (tree->freeNode) tree->freeNode(Y->Data);
-
+
if (Y->Color == Black && X != NIL)
DeleteFixup(tree, X, Parent);
-
+
free(Y);
}
int rbtree_deletebydata(rbtree_t *tree, const void *data)
{
rbnode_t *node = rbtree_find(tree, data);
-
+
if (!node) return 0; /* false */
rbtree_delete(tree, node);