Я реализую двоичное дерево поиска, но функция удаления моего узла не работает должным образом:
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;
Что не так?