【分析解答题】
【说明】
函数DElEtEnoDEBitrEE *r, int E)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为E的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:
typEDEF struCt tnoDE
int DAtA;/*结点的键值*/
struCt tnoDE *lChilD, *rChilD;/*指向左、右子树的指针*/
*BitrEE:
在二叉查找树上删除一个结点时,要考虑3种情况:
①若待删除的结点p是叶子结点,则直接删除该结点;
②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;
③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。
【函数】
intDElEtEnoDEBitrEE *r,int E)
BitrEE p=*r,pp,s,C;
whilE ( (1) ) /*从树根结点出发查找键值为E的结点*/
pp=p;
iF(E<p->DAtA) p=p->lChilD;
ElsE p=p->rChilD;
iF(!p) rEturn-1;/*查找失败*/
iF(p->lChilD && p->rChilD) /*处理情况③*/
s= (2) ;pp=p
whilE (3) pp=s;s=s->rChilD;
p->DAtA=s->DAtA;p=s;
/*处理情况①、②*/
iF ( (4) ) C=p->lChilD;
ElsE C=p->rChilD;
iF(p==*r) *r=C;
ElsE iF ( (5) ) pp->lChilD=C;
ElsE pp->rChilD=C;
FrEE (p);
rEturn 0;
查看答案解析
参考答案:
正在加载...
答案解析
正在加载...
根据网考网移动考试中心的统计,该试题:
0%的考友选择了A选项
0%的考友选择了B选项
0%的考友选择了C选项
0%的考友选择了D选项