void Delete(BiTree &b,int x){
if(!b)
return;
else{
if(x==b->data)
DeleteEle(b);
else if(x>b->data)
Delete(b->rightChild,x);
else
Delete(b->leftChild,x);
return ;
}
}
void DeleteEle(BiTree &b){
BiTree p,q,s;
if(!b->leftChild){
b=b->rightChild;
}
else if(!b->rightChild){
b=b->leftChild;
}
else{
q=b->leftChild;
if(!q->rightChild){
b=q;
}
else{
p=q->rightChild;
while(p->rightChild){
p=p->rightChild;
}
b->data=p->data;
//.................问题为下面这条语句。会导致错误答案
//为何?
p=p->leftChild;
}
}
return ;
}
数据结构排序二叉树的节点删除问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
CavanWang 2015-12-31 05:47关注你需要p 和另外一个可以保证随时指向p的父亲的指针 二者每次一块循环前行
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报