void loesche_knoten(node **zeiger) {
node *temp;
if ((*zeiger) != NULL) {
if ((*zeiger)->left == NULL && (*zeiger)->right == NULL) { //Fall 1 Blattknoten
free(*zeiger);
*zeiger = NULL;
} else if ((*zeiger)->left == NULL) { //Fall 2 ein untergeordnetes Element
temp = *zeiger;
*zeiger = (*zeiger)->right;
free(temp);
} else if ((*zeiger)->right == NULL) { //Fall 2 ein untergeordnetes Element
temp = *zeiger;
*zeiger = (*zeiger)->left;
free(temp);
} else { //Fall 3 im linken Teilbaum den größten Wert
temp = (*zeiger)->left;
node *hilfsZeiger = NULL;
while(temp->right != NULL) {
hilfsZeiger = temp;
temp = temp->right;
}
hilfsZeiger->right = temp->left;
temp->left = (*zeiger)->left;
temp->right = (*zeiger)->right;
free(*zeiger);
*zeiger = temp;
}
}
}
void loesche(node **zeiger, int such) {
if ((*zeiger) == NULL)
printf("Knoten nicht gefunden!\n");
else if ((*zeiger)->artikel->artikelnr == such) /* Gefunden! */
loesche_knoten(zeiger);
else if ((*zeiger)->artikel->artikelnr >= such)
loesche(&((*zeiger)->left), such);
else
loesche(&((*zeiger)->right), such);
}
void entfernen(baum *b, int nr) {
loesche(&b->root, nr);
}