首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列函数说明和C函数,将应填入(n)处。 【函数3说明】 函数DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查
阅读下列函数说明和C函数,将应填入(n)处。 【函数3说明】 函数DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查
admin
2009-02-15
84
问题
阅读下列函数说明和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(e<p->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;
}
选项
答案
(1)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
解析
(1)程序的第一条语句是变量的声明及赋初值,p指向二叉查找树的根。接下来从while循环的注释部分可以看出,该循环的功能是查找键值为e的结点。当循环的判断条件e<p->data时,进入左子树查找,否则到右子树查找。程序中没有关于找到结点的处理代码,即循环内部只处理了没找到结点的情况,所以循环条件应该是当找到键值为e的结点时退出循环。另外,应注意一个隐含的限制条件“p’ NULL”时,表示已经查找完毕,无需进入循环。通过分析,(1)应填p &&p->data!=e。(2)if程序段是处理第三种情况的,由循环中的语句“s=s->Rchild;”可看出,s用于要删结点的左子树中查找键值最大的结点,所以s的初值应是要删除结点的左子结点。可见,(2)应填写 p->Lchild。(3)根据前面所述的二叉树规则可知,要找的结点s应是左子树中查找键值最大的结点,所以,的初值应是要删除结点的左子结点。可见,(3)应填p->Rehild。本题把①、②结合在一起进行处理,所以引入了一个中间变量c,用c来存储用于替换p的结点。现在的关键问题是什么条件可以使这两种情况和在一起,因为若删除的结点为叶子结点时,p->Rchild与p->Lchild都为NULL;若删除的结点有一个子结点时,如果有左子结点,则p->Rchild为p->Rchild;如果有右子结点,则p->Lchild为NULL。当p->Lchild不为NULL时,说明是第二种情况,p结点含左子结点,所以c=p->Lchild;当p->Lchild为 NULL时,说明有两种可能:
第一:p->Rchild也为NULL,则p是叶子结点。
第二:p->Rchild不为NULL,则p是有右子结点的结点。
这两种情况都可以用c=p->Rchild,因为当p是叶子结点的时候用NULL代替p的位置即可,所以第(4)应填p->Lehild。在程序中很多地方都出现了变量pp,其实只要仔细看一下前面的程序就知道,pp一直指向的是p结点的前一个结点,即p的父结点,所以(5)的作用是判断p是其父结点的左子结点还是右子结点,(5)应填pp->Lchild =p。
转载请注明原文地址:https://kaotiyun.com/show/GuDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
软件测试的目的是______。A.试验性运行软件B.找出软件中的全部错误C.证明软件正确D.发现软件错误
以下关于软件生命周期的叙述不正确的是______。A.软件生命周期包括以下几个阶段:项目规划、需求定义和需求分析、软件设计、程序编码、软件测试、运行维护B.程序编码阶段是将软件设计的结果转换成计算机可运行的程序代码。为了保证程序的可读性、易维护性和提高
若有关系R(A,B,C,D,E)和S(B,C,F,G),则R与S自然联结运算后的属性列有(17)个,与表达式π1,3,6,7(σ3<6(RS))等价的SQL语句如下:SELECT(18)FROM(19)WHERE(20);
包过滤防火墙是一种通过软件检查数据包以实现系统安全防护的基本手段,以下叙述中,不正确的是()。
假设段页式存储管理系统中的地址结构如下图所示,则系统()。
某个应用中,需要对输入数据进行排序,输入数据序列基本有序(如输入为1,2,5,3,4,6,8,7)。在这种情况下,采用(40)排序算法最好,时间复杂度为(41)。(41)
模块A的功能为:从数据库中读出产品信息,修改后存回数据库,然后将修改记录写到维护文件中。该模块内聚类型为(38)内聚。以下关于该类内聚的叙述中,正确的是(39)。(39)
以下所示程序控制流程图中有(59)条线性无关的基本路径。
在结构化分析方法中,利用分层数据流图对系统功能建模。以下关于分层数据流图的叙述中,不正确的是___________(32)。采用数据字典为数据流图中的每个数据流、文件、加工以及组成数据流或文件的数据项进行说明,其条目不包括____________(33)。
随机试题
关于丁螺环酮,下列说法错误的是
男性,50岁,因车祸肝破裂,面色苍白,脉搏快弱,四肢冰冷,血压11.2/6.7kPa(84/50mmHg),呈现休克有效的治疗是
患者,女,36岁。慢性右下腹痛2年,伴不规则发热,腹泻1年,2年前有过肛周脓肿。体格检查无异常。X线造影示回肠末端及升结肠节段性病变、肠腔狭窄。其最可能的诊断为
甲对乙享有60万元债权,丙、丁分别与甲签订保证合同,但未约定保证责任的范围和方式。戊以价值30万元的房屋为乙向甲设定抵押并办理了登记。请回答以下问题。若乙的朋友己与乙达成协议,由其代替乙向甲还款,下列说法何者正确?
下列关于增值税纳税义务发生时间的表述中,正确的有()。
确定法国国民教育义务、免费、世俗三原则的法案是()
下面的叙述中,正确的是______。
设有如下程序段:Dima(10)ForEachxInaPrintx;Nextx在上面的程序段中,变量x必须是
Thecommandersaidtohistroopsthatundernocircumstances______tostepacrosstheborder.
A、Physics.B、Mathematics.C、Environmentalscience.D、Lifescience.A
最新回复
(
0
)