Функция для удаления узла из бинарного дерева(ключ - char), почему не коректно работает? Или как правильно сравнивать две строки в дереве?

struct node* Delete(struct node* root, char* data) {
    if (root == NULL) return root;
    else if (strcmp(data, root->key) < 0) root->left = Delete(root->left, data);
    else if(strcmp(data, root->key) > 0) root->right = Delete(root->left, data);
    else {
        //no child
        if (root->left == NULL && root->right == NULL) {
            free(root);
            root = NULL;
        }
        //one child
        else if (root->left == NULL) {
            struct node* temp = root;
            root = root->right;
            free(temp);
        }
        else if (root->right == NULL) {
            struct node* temp = root;
            root = root->left;
            free(temp);
        }
        else {
            struct node* temp = FindMin(root->right);
            root->key = temp->key; 
            root->right = Delete(root->right, temp->key);
        }
    }
    return root;
}

Ответы (0 шт):