问题

●试题三

阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。

【函数3说明】

函数DeleteNode(Bitree*r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:

typedef struct Tnode{

int data;/*结点的键值*/

struct Tnode*Lchild,*Rchild;/*指向左、右子树的指针*/

}*Bitree;

在二叉查找树上删除一个结点时,要考虑三种情况:

①若待删除的结点p是叶子结点,则直接删除该结点;

②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;

③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s ,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。

【函数3】

int DeleteNode(Bitree*r,int e){

Bitree p=*r,pp,s,c;

while( (1) ){/*从树根结点出发查找键值为e的结点*/

pp=p;

if(ep->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;

}

参考答案
您可能感兴趣的试题
  • ●试题四请补充函数fun(),该函数的功能是将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入Are you come from Sichuan?,则输入are you c
  • ●试题五阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。【说明】①在类体中添加函数move(double ax, double ay)的定义,使得点的坐标x和y分别移动ax和a
  • ●中断响应时间是指 (1) 。(1) A.从中断处理开始到中断处理结束所用的时间B.从发出中断请求到进入中断处理所用的时间C.从发出中断请求到中断处理结束所用的时间D.从中断处理结束到再次中断请求的时
  • ●为了解决高速CPU与内存之间的速度匹配问题,在CPU与内存之间增加了 (2) 。(2) A.ROMB.RAMC. FLASH ROMD. cache
  • ●地址码长度为二进制24位时,其寻址范围是 (3) 。(3) A.512KBB.1MBC.16MBD.24MB
  • ●SCSI 是一种 (4) 接口。(4) A.设备级B.智能化、通用型、系统级C.部件级D.计算机之间
相关内容