Функция удаления бинарного дерева поиска в C - PullRequest
0 голосов
/ 08 июня 2018

Я реализую двоичное дерево поиска, но функция удаления моего узла не работает должным образом:

void remove_node(treePointer *root, element data)
{
    treePointer next, temp;
    treePointer *left;
    treePointer *p = root;
    treePointer removed;
//    while(1)
//    {
//        if(*p == NULL)
//        {
//            printf("error\n");
//            return;
//        }
//        else if((*p)->data == data)
//            break;
//        else if((*p)->data > data)
//            p = &((*p)->left_child);
//        else
//            p = &((*p)->right_child);
//    }
    removed = search(*root, data);
    p = &removed;
    if((*p)->left_child == NULL)
        next = (*p)->right_child;
    temp = *p;
    *p = next;
    free(temp);

}

Использование закомментированного кода выполняет удаление правильно, но вместо этого используется функция search() (ниже) не.

treePointer search(treePointer root, element data)
{
    if(!root) return NULL;
    if(data == root->data) return root;
    if(data < root->data)
        return search(root->left_child, data);
    return search(root->right_child, data);
}

Вот определение структуры:

typedef int element;
typedef struct tree *treePointer;
typedef struct tree
{
    element data;
    treePointer left_child;
    treePointer right_child;
} tree;

Что не так?

...