#Deleting from a Binary Search Tree

7 messages · Page 1 of 1 (latest)

leaden plover
#

I just want ideas on how to delete a node from a BST while making sure that the parent pointer (if it has one, which should be all but the root) also points to NULL afterwards

main condorBOT
#

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.

leaden plover
#
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