更新时间:2015-11-22 20:07:23浏览次数:1+次
不然c成为q的右孩子。最后释放结点p所占的空间。
具体代码实现:
template <class T>
ResultCode BSTree<T>::Remove(T& x){
BTNode<T> *c,*s,*r,*p=root,*q=NULL;
while (p && p->element!=x) {
q=p; //q为p的双亲
if (x<p->element)
p=p->lChild;
else
p=p->rChild;
}
if(!p)
return NotPresent;
x=p->element;
if (p->lChild && p->rChild) {
s = p->rChild; r = p;
while (s->lChild) { //结点s是p的中序后继,
r = s; s = s->lChild; // r是s的双亲
}
p->element = s->element; //将s的值复制到p中,
p=s; q=r; //准备删除p,指针q指示p的双亲
}
if (p->lChild) c = p->lChild;
else c = p->rChild; //准备以结点c取代结点p
if(p == root) root = c; //以结点c取代结点p
else if (p == q->lChild) q->lChild = c;
else q->rChild = c;
delete p;
return Success;
}
相关资讯