I'm currently running into a problem that I can't seem to figure out. The goal is to try to delete a node from a binary search tree. For some reason I keep running into a stack overflow because of this function. Is there something that I'm missing?
int delete(struct node * n,int value) {
//if there is no bst
if (n == NULL || head == NULL) {
return 0;
}
//if head node is the node that has to be deleted
if (head->value == value) {
if (head->left != NULL && head->right == NULL) {
head = head->left;
} else if (head->left == NULL && head->right != NULL) {
head = head->right;
} else if (head->left != NULL && head->right != NULL) {
int temp = leftOfRight(head);
head->value = temp;
delete(head->right,temp);
} else {
head = NULL;
}
}
if (n->left != NULL && n->left->value == value) { //if left node is the one that has to be deleted
if (n->left->left != NULL && n->left->right != NULL) {
int temp = leftOfRight(n->left);
n->value = temp;
delete(n->right,temp);
} else if (n->left->left != NULL) {
n->left = n->left->left;
} else if (n->left->right != NULL) {
n->right = n->right->right;
} else {
n->left = NULL;
}
} else if (n->right != NULL && n->right->value == value) {
if (n->right->left != NULL && n->right->right != NULL) { //if right node is that one that has to be deleted
int temp = leftOfRight(n->right);
n->value = temp;
delete(n->right,temp);
} else if (n->right->left != NULL) {
n->right = n->right->left;
} else if (n->right->right != NULL) {
n->right = n->right->right;
} else {
n->right = NULL;
}
} else if (value < n->value) {
return delete(n->left,value);
} else if (value > n->value) {
return delete(n->right,value);
}
return 1; }