- 论坛徽章:
- 0
|
本帖最后由 UFancyMe 于 2015-05-13 12:31 编辑
回复 9# MeRcy_PM
重写了一段 还是不明白为什么没有free()掉原来的节点
此处要删除节点12,找到13赋给12,node* temp,指向节点13,为什么在gdb中free(temp)之后 p n->right->left 还是给出了一个值(struct node*) 0x6034d0
static node* remove_node(node* n,ElementType *e)
{
if(n==NULL) return NULL;
//递归找到要删除的节点
if(*e < n->element)
n->left=remove_node(n->left,e);
else if(*e > n->element)
n->right=remove_node(n->right,e);
else
{
node* temp;
if(n->left && n->right)
{
temp=find_min(n->right);
n->element=temp->element;
if(temp->right)
remove_node(temp,&(temp->element));
}
else
{
temp=n;
if(n->left==NULL)
n=n->right;
else
n=n->left;
}
free(temp);
temp=NULL;
}
return n;
}
|
|