struct Node* deleteNode(struct Node* root, int num) {
struct Node* parent = null;
struct Node* iter = root;
while (iter->value != num && iter != NULL) {
if (num < iter->value) {
parent = iter;
iter = iter->left;
} else if (num > iter->value) {
parent = iter;
iter = iter->right;
} else {
break;
}
}
if (parent == NULL) {
if (iter->left != NULL && iter->right != NULL) {
struct Node* newRoot = iter->left;
newRoot->right = iter->right;
free(iter);
return newRoot;
} else if (iter->left != NULL) {
struct Node* newRoot = iter->left;
free(iter);
return newRoot;
} else if (iter->right != NULL) {
struct Node *newRoot = iter->right;
free(iter);
return newRoot;
} else {
return NULL;
}
}
if (iter == NULL) {
return root;
}
if (iter->left != NULL && iter->right != NULL) {
if (num < parent->value) {
iter->left->right = iter->right;
parent->left = iter->left;
} else if (num > parent->value) {
iter->left->right = iter->right;
parent->right = iter->left;
}
free(iter);
} else if (iter->left != NULL) {
if (num < parent->value) {
parent->left = iter->left;
} else if (num > parent->value) {
parent->right = iter->left;
}
free(iter);
} else if (iter->right != NULL) {
if (num < parent->value) {
parent->left = iter->right;
} else if(num > parent->value) {
parent->right = iter->right;
}
free(iter);
} else {
if (num < parent->value) {
parent->left = NULL;
} else if (num > parent->value) {
parent->right = NULL;
}
free(iter);
}
return root;
}3 views