问答题 假设root是一棵给定的非空查找树,对于下面给出的子程序,当执行注释中给出的调用语句时,就可以实现如下的操作:在非空查找树root中查找值为k的结点;若值为k的结点在树中,且是一个叶子结点,则删除此叶子结点,同时置Success为“真”;若值为k的结点不在树中,或者虽然在树中,但不是叶子结点,则不进行删除,仅置success为“假”。应注意到非空查找树只包含一个结点情况,此时树中的唯一结点,既是根结点,也是叶子结点。 #include typedef struct、node{ int key; struct node*left, *right ; }node; node*root; int kt success; void del—leaf(node**t,int k,int。sn) (node*P,*pf;p=。t; *sn=0; while( (1) &&!*sn) if(k==p一>key)。sn=1; else { (2) ; if (kkey)p=p->left ; else p=p->right; } if (*sn&&P一>Ieft==NULL&&P一>right==null) { if( (3) ) if(pf一>left==p)pf一>left=null; else pf一>right=null; else (4) ; free(p); } else*sn=0; }/*call form:del—leaf(&root,k,&success);*/ 【上海大学1999一、2(8分)】
【正确答案】正确答案:(1)p!=null (2)pf=p (3)p!=*t (4)*t=null
【答案解析】