【发布时间】:2011-03-30 16:20:37
【问题描述】:
我正在编写一个二叉搜索树,但在找到有效删除节点的方法时遇到了一些麻烦。
我有这个代码:
struct node* deleteNode(int i, struct node *N)
{
if (N==NULL)
{
return NULL;
}
else if (i<N->value)
{
N->size--;
N->lChild=deleteNode(i,N->lChild);
}
else if (i>N->value)
{
N->size--;
N->rChild=deleteNode(i,N->rChild);
}
else if (N->lChild==NULL)
{
return N->rChild;
}
else if (N->rChild==NULL)
{
return N->lChild;
}
else
{
N->size--;
N->value=findMin(N->rChild);
N->rChild=deleteNode(N->value,N->rChild);
}
return N;
}
N 是一个节点结构,它有 5 个字段:value、lChild、rChild、size、height。 事实上,我在这里所做的是让树不指向我想要删除的节点,但是当我试图放置类似的东西时:
else if (N->rChild==NULL)
{
free(N);
N=NULL;
return N->lChild;
}
或所有看起来相似的代码,它都不起作用。有人可以指出我正确的方向吗? 谢谢。
【问题讨论】:
标签: c binary-search-tree free