Status DeleteBST(BiTree &T, KeyType key){
//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素,并返回
//TRUE;否则返回FALSE
if(!T)
return false; //不存在关键字等于key的数据元素
else{
if(key == T->data.key) { // 找到关键字等于key的数据元素
return Delete(T);
}
else if(key < T->data.key)
return DeleteBST(T->lchild, key);
else
return DeleteBST(T->rchild, key);
}
}
Status Delete(BiTree &p){
//从二叉排序树中删除结点p,并重接它的左或右子树
if(!p->rchild){ //右子树空则只需重接它的左子树
q=p;
p=p->lchild;
delete q;
}
else if(!p->lchild){ //左子树空只需重接它的右子树
q=p;
p=p->rchild;
delete q;
}
else{ //左右子树均不空
q=p;
s=p->lchild;
while(s->rchild){
q=s;
s=s->rchild;
} //转左,然后向右到尽头
p->data = s->data; //s指向被删结点的“前驱”
if(q!=p)
q->rchild = s->lchild; //重接*q的右子树
else
q->lchild = s->lchild; //重接*q的左子树
delete s;
}
return true;
}