问答题 [函数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就是一棵二叉查找树。