64,642
社区成员
发帖
与我相关
我的任务
分享
//数据结构与算法分析
void remove(const Type& x,BinaryNode*& p)
{
if(t == NULL)
return;
if(x < t->element)
remove(x,t->left);
else if(x > t->element)
remove(x,t->right);
else if(t->left != NULL && t->right !=NULL)
{
t->element=findMin(t->right)->element;
remove(t->element,t->right);
}
else
{
BinaryNode* oldNode = t;
t=(t->left != NULL) ? t->left : t->right;
delete oldNode;
}
}
BinaryNode* findMin(BinaryNode* t)
{
if(t!=NULL)
while(t->left!=NULL)
t=t->left;
return t;
}
//以下是课本上的
void remove(BinaryNode* t)
{
if(!p->rchild)
{
q=p;
p=p->lchird;
free(q);
}
else if(!p->lchild))
{
q=p;
p=p->right;
free(q);
}
else //左右子树均不空
{
q=p;
s=p->lchild;
while(s->right) //转左,然后向右到尽头
{
q=s;
s=s->rchild; //s指向被删除结点的前驱;
}
p->element=s->element;
if(q!=p) //重接*q右子树
q->rchild=s->lchild;
else //重接*q左子树
q->lchild=s->lchild;
delete s;
}
}