问答题
假设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分)】