阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。【说明】 函数DeleteNode (Bitree *r,
阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。
【说明】
函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:
typedef struct Tnode{
int data; /*结点的键值*/
struct Tnode *Lchild, *Rchild; /*指向左、右子树的指针*/
}*Bitree:
在二叉查找树上删除一个结点时,要考虑3种情况:
①若待删除的结点p是叶子结点,则直接删除该结点;
②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;
③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。
【函数】
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!=NULL&&p->data!=e或p&&(*p).data!=e (2)p->Lchild或(*p).Lchild (3)p->Rchild或(*p).Rchild (4)p->Lchild或(*p).Lchild (5)pp->Lchid=p或p=(*pp).child 解析:本程序的功能是删除二叉查找树的一个结点。题目中对怎样删除结点有着比较详细的说明。
第1种情况就是删除叶子结点,叶子结点可以直接删除,这一点很好理解,因为叶子结点删除后并不会打乱查找树的顺序。
第2种情况是删除只有一个子结点的结点,只需把其子结点代替父结点即可。若子结点下有子树,子树结构不变。
第3种情况要复杂一点,要用到二叉查找树的一些性质,就是结点右子树的所有结点都大于根结点,左子树所有结点都小于根结点。所以,当删除了有左右子树的结点时,要在左子树找最大的结点,来替换被删结点。
关于T细胞的叙述,正确的是()A.T细胞只存在淋巴中B.T细胞可直接处理抗原无需吞噬细胞的呈递C. 语文 2020-05-14 …
如果事务T对数据项R加上了排他锁,则T对R()。A.只能读不能写B.只能写不能读C.既可读又可写D. 计算机类考试 2020-05-23 …
如果事务T获得了数据项R上的X锁,则事务T对R()。A.既可读又可写B.不能读不能写C.只能读不能写 计算机类考试 2020-05-24 …
如果事务T获得了数据项Q上的排它锁,则T对Q______。A.只能读不能写B.只能写不能读C.既可读 计算机类考试 2020-05-24 …
如果事务T获得了数据项Q上的排它锁,则T对Q()。A.只能读不能写B.只能写不能读C.既可读又可写D 计算机类考试 2020-05-24 …
设函数f(x)连续且恒大于零,F(t)=∫∫∫Ω(t)f(x2+y2+z2)dv∫∫D(t)f(x 其他 2020-06-12 …
含有字母t,y,x,q,d的单词含有t,y,x,q,d或t,y,l,w,d的单词(词组也行,单词最 英语 2020-07-16 …
按要求写出下列字母开头的各类单词.急用.!1.动物:h();C();d();f();p()2.颜色 英语 2020-07-17 …
英语d与t,g与k这些音的浊化问题在什么情况下t读d,k读g?我记得有3对,还有一对是什么?最重要的 英语 2020-11-10 …
已知横波上质点在纵向上位移的表达式为D(x,t)=20sin(20x-20t),x为波在横向上的位移 物理 2020-12-15 …