问答题
[函数5]
int DeleteNode(Bitree *r,int e){
Bitree p=* r,pp,s,c;
while({{U}} (1) {{/U}}){/ * 从树根结点出发查找键值为e的结点 * /
pp=p;
if(e<p->data) p=p->Lchild;
else p=p->Rchild
}
if(! p)return-1;/ * 查找失败 * /
if(p->Lchild && p->Rchild){/ * 处理情况③ * /
s={{U}} (2) {{/U}};pp=p;
while({{U}} (3) {{/U}}){pp=s;s=s->Rchild;}
p->dara=s->data;P=s;
}
/ * 处理情况①、② * /
if({{U}} (4) {{/U}})c=p->Lchild;
else c=p->Rchild
if(p==*r) *r=c;
else if({{U}} (5) {{/U}})pp->Lchild=c;
else pp->Rchild=c;
free(p);
return 0;
}
【正确答案】
【答案解析】p && p->data !=e或p&&(*p).data!=e
(2)p->Lchild或(*P).Lchild
(3)s->Rchild或(*s).Rchild
(4)p->Lchild或(*p).Lchild
(5)p==pp->Lchild或p==(*PP).Lchild
[分析]
本程序的功能是删除二叉查找树的一个结点。二叉查找树又称二叉排序树(binary sort tree)。一棵二叉查找树或者是一棵空树,应满足以下递归条件:
①查找树的左、右子树各是一棵查找树。
②若查找树的左子树非空,则其左子树上的各结点值均小于根结点的值。
③若查找树的右子树非空,则其右子树上的各结点值均大于根结点的值。
例如,图4-8就是一棵二叉查找树。
