正如Nik Bougalis和Joachim Pileborg所指出的,问题在于tree_search的返回值。您必须返回一个指向节点的指针,以便使用free删除它,当然,假设它最初是使用malloc分配的。
我收到一个"释放的指针未分配"错误。现在我知道这个节点实际上存在于我的树中(考虑到我的插入和搜索是有效的),但当我去删除一个节点时,我会遇到一个错误。如对此有任何见解,我们将不胜感激。
int set_delete(set_t *set, int del_val)
{
/* TODO: readd delete child nodes */
struct tree_node *node;
node = set->root;
*node = tree_search(&node, del_val);
if (node != NULL) {
free(node);
return 1;
}
return 0;
}
struct tree_node tree_search(struct tree_node **node, int search_val) {
if(!(*node)) {
return **node;
}
if ((*node)->val == search_val) {
return **node;
} else if ((*node)->val > search_val) {
tree_search(&(*node)->left, search_val);
} else if ((*node)->val < search_val) {
tree_search(&(*node)->right, search_val);
}
return **node;
}
struct tree_node * tree_search( struct tree_node *node, int search_val)
{
if( node == 0 )
{
return 0; // not found
}
if( node->val == search_val)
{
return node; // found
}
if( node->val > search_val)
{
return tree_search( node->left, search_val); // search left tree
}
return tree_search( node->right, search_val); // search right tree
}