#Deleting from a Binary Search Tree
7 messages · Page 1 of 1 (latest)
When your question is answered use !solved to mark the question as resolved.
Remember to ask specific questions, provide necessary details, and reduce your question to its simplest form. For tips on how to ask a good question use !howto ask.
void del_tree_node(node* root, customer* person) {
if (root == NULL) {
return;
}
int comparison = strcmp(person->name, root->person->name);
if (comparison < 0) {
del_tree_node(root->left, person);
}
else if (comparison > 0) {
del_tree_node(root->right, person);
}
else {
if (root->left == NULL && root->right == NULL) {
printf("%s deleted\n", root->person->name);
free(root->person->name);
free(root->person);
free(root);
root = NULL;
}
else if (root->left == NULL) {
node* temp = root->right;
printf("%s deleted\n", root->person->name);
free(root->person->name);
free(root->person);
free(root);
root = temp;
}
else if (root->right == NULL) {
node* temp = root->left;
printf("%s deleted\n", root->person->name);
free(root->person->name);
free(root->person);
free(root);
root = temp;
}
else {
node* max_left_node = left_tree_maximum(root->left);
customer* temp = root->person;
root->person = max_left_node->person;
max_left_node->person = temp;
del_tree_node(max_left_node, person);
}
}
}
That's the function to delete, and I'll post the structs in a moment
typedef struct customer {
char* name;
int points;
} customer;
typedef struct tree_node {
struct customer* person;
struct tree_node* left;
struct tree_node* right;
int depth;
} node;
Ah, i didn't want to work with finding the parent in the function but I figure if I just add a node* parent value to my tree_node struct and set it whenever I create a node it should be fine
!close