题目详情

阅读以下说明和C函数,填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。

【说明】

二叉树的宽度定义为含有结点数最多的那一层上的结点数。函数GetWidth()用于求二叉树的宽度。其思路是根据树的高度设置一个数组counter[],counter[i]存放第i层上的结点数,并按照层次顺序来遍历二叉树中的结点,在此过程中可获得每个结点的层次值,最后从counter[]中取出最大的元素就是树的宽度。

按照层次顺序遍历二叉树的实现方法是借助一个队列,按访问结点的先后顺序来记录结点,离根结点越近的结点越先进入队列,具体处理过程为:先令根结点及其层次号(为1)进入初始为空的队列,然后在队列非空的情况下,取出队头所指示的结点及其层次号,然后将该结点的左予树根结点及层次号入队列(若左子树存在),其次将该结点的右子树根结点及层次号入队列(若右子树存在),然后再取队头,重复该过程直至完成遍历。

设二叉树采用二叉链表存储,结点类型定义如下:

typedef struct BTNode {

TElemType data;

struct BTNode *left, *right;

} BTNode, *BiTree;

队列元素的类型定义如下:

typedef struct {

BTNode *ptr;

int LevelNumber;

} QElemType;

GetWidth()函数中用到的函数原型如下所述,队列的类型名为QUEUE:

初级程序员,章节练习,基础复习,案例分析

【C函数】

int GetWidth(BiTree root)

{

QUEUE Q;

QElemType a, b;

int width, height=GetHeight(root);

int i, *counter=(int *) calloc (height+1, sizeof(int));

if ( (1) ) return -1; /* 申请空间失败 */

if ( !root ) return 0; /* 空树的宽度为0 */

if ( (2) ) return -1; /* 初始化队列失败时返回 */

a.ptr=root; a.LevelNumber=1;

if (!EnQueue ( &Q, a)) return -1; /* 元素入队列操作失败时返回 */

while (!isEmpty (Q)) {

if( (3) )return-1; /* 出队列操作失败时返回*/

counter[b.LevelNumber]++; /* 对层号为b.LevelNumber的结点计数 */

if(b.ptr->left){ */ 若左子树存在,则左子树根结点及其层次号入队 */

a.ptr=b.ptr->left;

a.LevelNumber= (4) ;

if ( !EnQueue (&Q, a)) return -1;

}

if(b.ptr->right){ /* 若右子树存在,则右子树根结点及其层次号入队 */

a.ptr = b.ptr->right;

a.LeveINumber= (5) ;

if ( !EnQueue (&Q, a)) return -1;

}

}

width=counter [1] ;

for (i=1; i< height +1; i++) /* 求counter[]中的最大值 */

if ( (6) ) width=counter[i];

free(counter);

return width;

}

正确答案及解析

正确答案
解析

(1)!counter 或0==counter 或NULL==counter 或等价表示

(2)!InitQueue(&Q) 或0==InitQueue(&Q) 或等价表示

(3)!DeQueue(&Q,&b) 或0==DeQueue(&Q,&b) 或等价表示

(4)b.LeveINumber+1 或等价表示

(5)b.LeveINumber+1 或等价表示

(6)counter[i]>width 或等价表示

本题考查数据结构实现和C语言基本应用。

考生需要认真阅读题目中的说明,以确定代码部分的处理逻辑,从而完成代码。

根据注释,空(1)处应填入“!counter”或其等价形式。

由于初始化队列的函数原型为“InitQueue(QUEUE *Q)”且返回值为0表示操作失败,因此调用该函数时实参应取地址,即空(2)处应填入“!InitQueue(&Q)”或其等价形式。

空(3)处需进行出队列操作,同时通过参数得到队头元素,根据说明,该空应填入“!DeQueue(&Q,&b)”或其等价形式。

出队操作后,得到的队头元素用b表示,根据队列元素的类型定义,其对应结点在二叉树中的层次号表示为b.LevelNumber,显然,其孩子结点的层次号应加1,因此空(4)和(5)处应填入“b.LevelNumber+1”。

从代码中可知变量width的作用是表示最大的层次编号,并通过顺序地扫描数组counter中的每一个元素来确定width的值,显然,空(6)处应填入“counter[i]>width”或其等价形式。

你可能感兴趣的试题

单选题

一台主机的IP地址为202.123.25.36,掩码为255.255.254.0。如果该主机需要在该网络进行直接广播,那么它应该使用的目的地址为( )

  • A.202.123.25.0
  • B.202.123.25.255
  • C.202.123.24.0
  • D.202.123.24.255
查看答案
单选题

在计算机系统的日常维护工作中,应当注意硬盘工作时不能__(2)__。另外,需要防范病毒,而__(3)__是不会被病毒感觉的。

  • A.电子邮件
  • B.硬盘
  • C.U盘
  • D.ROM
查看答案
单选题

有 4 个 IP 地址:201.117.15.254、201.117.17.01、201.117.24.5 和 201.117.29.3,如果子网掩码为 255.255.248.0,则这 4 个地址分别属于3个子网;其中属于同一个子网的是()

  • A.201.117.15.254 和 201.117.17.01
  • B.201.117.17.01 和 201.117.24.5
  • C.201.117.15.254 和 201.117.29.3
  • D.201.117.24.5 和 201.117.29.3
查看答案
单选题

在异步通信中,每个字符包含1位起始位、7位数据位、1位奇偶位和1位终止位,每秒钟传送200个字符,采用4相位调制,则码元速率为()。

  • A.50波特
  • B.500波特
  • C.550波特
  • D.1000波特
查看答案
单选题

在 Windows 中,运行( )命令得到下图所示结果。以下关于该结果的叙述中,错误的是( )。

Pinging 59.74.111.8 with 32 bytes of data:

Reply from 59.74.111.8: bytes=32 time=3ms TTL=60

Reply from 59.74.111.8: bytes=32 time=5ms TTL=60

Reply from 59.74.111.8: bytes=32 time=3ms TTL=60

Reply from 59.74.111.8: bytes=32 time=5ms TTL=60

Ping statistics for 59.74.111.8:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 3ms, Maximum = 5ms, Average = 4ms

  • A.该命令使得本地主机向目标主机发送了 4 个数据包
  • B.本地主机成功收到了目标主机返回的 4 个数据包
  • C.本地主机与目标主机连接正常
  • D.该命令用于查看目标主机的 IP 地址
查看答案

相关题库更多 +