请认真阅读以下函数说明、图及C程序,将程序段中(1)~(7)空缺处的语句填写完整。[说明] 一般的树结构
请认真阅读以下函数说明、图及C程序,将程序段中(1)~(7)空缺处的语句填写完整。
[说明]
一般的树结构常采用孩子—兄弟表示法表示,即用二叉链表做树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点。例如,如图1-15(a)所示树的孩子—兄弟表示如图1-15(b)所示。
函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对如图1-15所示的树进行层序遍历时,节点的访问次序为D B A E F P C。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如表1-11所示。
Bool、Status类型定义如下:
树的二叉链表节点定义如下:
[C函数程序]
这是一道要求读者掌握树结构的存储及遍历运算的程序分析题。本试题的解答思路如下。 队列可以保证访问节点时按照层次和自左至右的顺序。借助队列结构对树进行层序遍历时,每个节点都进出队列一次,节点出队列时进行访问。其过程是,首先令树根节点入队,若是森林(树根之间互为兄弟),接着则令其余树的根节点入队,然后在队列非空的情况下,队头节点出队,访问该节点同时令其孩子节点入队。以此类推,直到队列为空。 在试题所给出的[C函数程序]中,代码“InitQueue(&tempQ); (1) ;”完成初始化队列并令根节点入队列的功能,因此(1)空缺处所填写的内容是“EnQueue(&tempQ, root)”。 采用二叉树存储树结构时,其右分支表示兄弟关系,因此队头节点出队时,应沿右分支将队头节点的所有孩子依次加入队列。(2)空缺处所在的while循环完成处理第一棵树的兄弟节点的功能,因此,(2)空缺处所填写的内容是“brotherptr=brotherptr->nextbrother”。至此,就完成了第一层节点的处理。 (3)空缺处用于判断队列是否为空,即应填入“!IsEmpty(tempQ)”或其他等价形式。 使用队列或栈结构存储元素以实现某种运算的基本特点是,当队列非空时,应令队头元素出队列。因此(4)空缺处所填写的内容是“DeQueue(&tempQ,&ptr)”。 若一个节点不存在孩子,则其firstchild指针域为空,也无须令其孩子节点入队列。因此,(5)空缺处所填写的内容是“!ptr->firstchild”或其他等价形式。反之,若一个节点有孩子,则应首先令其第一个孩子节点入队列,然后通过右分支链使其他孩子节点入队列。因此,(6)空缺处所填写的内容是“EnQueue(&tempQ,ptr->firstchild)”,(7)空缺处所填写的内容是“brotherptr=brotherptr->nextbrother”。
已知a,b,c满足ab+a+b=ac+c+a=3,求(a+1)(b+1)(c+1)的值 数学 2020-04-05 …
正数a,b,c满足ab+a+b=bc+b+c=ca+c+a=3,求(a+1)(b+1)(c+1)的 数学 2020-04-05 …
已知x\(y+z)=a,y\(x+z)=b,z\(x+y)=c,试求a\(a+1)+b\(b+1) 数学 2020-05-13 …
已知抛物线y=ax2-2ax+c-1的顶点在直线y=-8/3x+8上,与X轴交于A(-1,0)和B 数学 2020-05-16 …
已知:抛物线y=ax2-2ax+c-1的顶点A在一次函数y=-8/3x+8的图像上,该抛物线与x轴 数学 2020-05-16 …
设a,b,c为满足a+b+c=1的正实数,证明:a3√1+b-c+b3√1+c-a+c3√1+a- 数学 2020-05-16 …
b=2,c=1,那么b&&c+1的值为1,原因是什么?是因为c+1=2,所以2&&2等于1吗?还是 数学 2020-06-14 …
已知三个正数a.b.c.满足abc=1.求求(a/ab+a+1)+(b/bc+b+1)+(c/ac 数学 2020-07-20 …
因式分解的题...2x-3/x^2-x=A/x-1+B/x,其中A,B为常数,则A+B的值为?已知 数学 2020-07-20 …
已知a,b,c为正整数且满足(1/a)+(1/b)+(1/c)=1,求a,b,c所有解(abc值可 数学 2020-07-20 …