对下面的二叉树进行顺序存储(用数组 MEM 表示),已知结点 A、B、C 在 MEM 中对应元素的 下标分别为 1、2、3,那么结点 D、E、F 对应的数组元素下标为( )。

题目
对下面的二叉树进行顺序存储(用数组 MEM 表示),已知结点 A、B、C 在 MEM 中对应元素的 下标分别为 1、2、3,那么结点 D、E、F 对应的数组元素下标为( )。


A.4、5、6
B.4、7、10
C.6、7、8
D.6、7、14
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

假设用一个长度为50的数组(数组元素的下标为0~49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有( )个元素。


正确答案:20
20

第2题:

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

【说明】

已知某二叉树的非叶子结点都有两个孩子结点,现将该二叉树存储在结构数组Ht中。结点结构及数组Ht的定义如下:

define MAXLEAFNUM 30

struct node{

char ch; /*当前结点表示的字符,对于非叶子结点,此域不用*/

char *pstr; /*当前结点的编码指针,非叶子结点不用*/

int parent; /*当前结点的父结点,为0时表示无父结点*/

int lchild,rchild;

/*当前结点的左、右孩子结点,为0时表示无对应的孩子结点*/

};

struct node Ht[2*MAXLEAFNUM]; /*数组元素Ht[0]不用*/

该二叉树的n个叶子结点存储在下标为1~n的Ht数组元素中。例如,某二叉树如果其存储结构如下图所示,其中,与叶子结点a对应的数组元素下标为1,a的父结点存储在Ht[5],表示为Ht[1].parent=5。Ht[7].parent=0表示7号结点是树根,Ht[7].child=3、Ht[7].rchild=6分别表示7号结点的左孩子是3号结点、右孩子是6号结点。

如果用0或1分别标识二叉树的左分支和右分支(如上图所示),从根结点开始到叶子结点为止,按所经过分支的次序将相应标识依次排列,可得到一个0、1序列,称之为对应叶子结点的编码。例如,上图中a,b,c,d的编码分别是100,101,0,11。

函数LeafCode(Ht[],n)的功能是:求解存储在Ht中的二叉树中所有叶子结点(n个)的编码,叶子结点存储在Ht[1]~Ht[n]中,求出的编码存储区由对应的数组元素pstr域指示。

函数LeafCode从叶子到根逆向求叶子结点的编码。例如,对上图中叶子结点a求编码的过程如下图所示。

typedef enum Status {ERROR,OK} Status;

【C函数】

Status LeafCode(struct node Ht[], int n)

{

int pc, pf; /*pc用于指出树中的结点,pf则指出pc所对应结点的父结点*/

int i,start;

char tstr[31] = {'\0'}; /*临时存储给定叶子结点的编码,从高下标开始存入*/

for(i = 1;(1); i++){ /*对所有叶子结点求编码,i表示叶结点在HT数组中的下标*/

start = 29;

pc = i; pf = Ht[i].parent;

while (pf !=(2)) { /*没有到达树根时,继续求编码*/

if ((3).lchild == pc ) /*pc所表示的结点是其父结点的左孩子*/

tstr[--start] = '0';

else

tstr[--start] = '1';

pc =(4); pf = Ht[pf].parent; /*pc和pf分别向根方向回退一层*/

}/* end of while */

Ht[i].pstr = (char *) malloc(31-start);

if (!Ht[i].pstr) return ERROR;

strcpy(Ht[i].pstr,(5));

}/* end of for */

return OK;

}/* and of LeafCode */


正确答案:(1) i=n或其等价表示 (2) 0 (3) Ht[pf]或(*(Ht+pf)) (4) pf (5) &tstr[start]或tstr+start
(1) i=n,或其等价表示 (2) 0 (3) Ht[pf],或(*(Ht+pf)) (4) pf (5) &tstr[start],或tstr+start 解析:本题考查C语言的基本控制结构、数组以及参数传递基础知识。
哈夫曼算法构造最优二叉树的过程如下。
(1)根据给定的n个权值{W1,W2,…,Wn}构成n棵二叉树的集合F={T1,T2,…, Tn},其中每棵二叉树Ti中只有一个带权为Wi的根结点,其左、右子树均空。
(2)在F中选取两棵根结点权值最小的树作为左、右子树构造一棵新的二叉树,且置新二叉树的根结点的权值为其左、右子树根结点的权值之和。
(3)在F中删除这两棵二叉树,同时将新得到的二叉树加入F中。
(4)重复(2)和(3),直到F只含一棵树为止。这棵树便是最优二叉树。
最优二叉树是从叶子到根构造起来的,每次都是先确定一棵二叉树的左、右子树,然后再构造出树根结点,因此,最优二叉树中只有叶子结点和分支数为2的内部结点。若已知叶子的数目为n,则内部结点数比叶子少1,因此,整棵树所需的存储空间规模是确定的,可以采用数组空间来存储最优二叉树。
题目中已经指出该二叉树的n个叶子结点存储在下标为1~n的Ht数组元素中,同时举例说明父结点编号为0的结点式树根结点。因此,空(1)处应填入“i=n”。同时,除了根结点之外,每个结点都有唯一的父结点,因此到达树根的标志为结点的父结点编号为0,因此,空(2)处应填入“0”。
根据代码中pc和pf的作用:pc用于指出树中的结点,pf则指出pc所对应结点的父结点,则空(3)处应填入“Ht[pf]”,空(4)处填入“pf”使得pc回退至其父结点位置。
空(5)考查了标准函数的调用,对于函数strcpy(),其原型为char* strcpy (char*,const char*)。两个参数都是字符指针,根据代码中tstr的作用,应将tstr+start(tstr[start]~tstr[29]存放编码)作为实参调用strcpy,因此空(5)处应填入“tstr+start”或“&tstr[start]”。

第3题:

设查找表为(7,15,21,22,40,58,68,80,88,89,120) ,元素的下标依次为1,2,3,……, 11.(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用下标表示)(2)说明成功查找到元素40需要经过多少次比较?(3)求在等概率条件下,成功查找的平均比较次数?


参考答案:(1)(2)4次
(3)ASL=(1+2*2+3*4+4*4)/11=3

第4题:

对下图所示的二叉树进行顺序存储(根结点编号为1,对于编号为i的结点,其左孩子结点为2i,右孩子结点为2i+1)并用一维数组BT来表示。已知结点X、E和D在数组BT中的下标为分别为1、2、3,可推出结点G、K和H在数组BT中的下标分别为( )。

A.10、11、12
B.12、24、25
C.11、12、13
D.11、22、23

答案:D
解析:
按照“左孩子结点为2i,右孩子结点为2i+1”,且E=2的原则带入图中元素计算。

第5题:

二叉树如右图所示,若进行顺序存储(即用一维数组元素存储该二叉树中的结点且通过下标反映结点间的关系,例如,对于下标为i的结点,其左孩子的下标为2i、右孩子的下标为2i+1),则该数组的大小至少为( );若釆用三叉链表存储该二叉树(各个结 点包括结点的数据、父结点指针、左孩子指针、右孩子指针),则该链表的所有结点中空指针的数目为( )。

A.6 B.10 C.12 D.15 A.6 B.8 C.12 D.14


正确答案:D,B

第6题:

假设用-个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有的元素个数为( )。

A.50

B.19

C.1

D.20


正确答案:B
当前栈中的所有元素的个数就是用栈底指针减去栈顶指针。

第7题:

在二叉树的顺序存储中,每个结点的存储位置与其父结点、左右子树结点的位置都存在一个简单的映射关系,因此可与三叉链表对应。若某二叉树共有n个结点,采用三叉链表存储时,每个结点的数据域需要d个字节,每个指针域占用4个字节,若采用顺序存储,则最后一个结点的下标为k(起始下标为1),那么(39)时采用顺序存储更节省空间。

A.

B.

C.

D.


正确答案:A
解析:采用三叉链表存储二叉树时,每个结点需要占用d+4*3个字节,n个结点则需要 n(d+12)。若顺序存储最后一个结点的下标为k,则共需kd个字节。显然,kdn(d+12)时采用顺序存储更节省空间,即要求(作图)。

第8题:

下列关于数组下标的描述中,错误的是()。

A.C++语言中数组元素的下标是从0开始的

B.数组元素下标是一个整常型表达式

C.数组元素可以用下标来表示

D.数组元素的某维下标值应小于该维的大小值


正确答案:B

第9题:

假设用一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有【1】个元素。


正确答案:
20

第10题:

某二叉树如图所示,若进行顺序存储(即用一维数组元素存储该二叉树中的结点且通过下标反映结点间的关系,例如,对于下标为i的结点,其左孩子的下标为2i、右孩子的下标为2i+1),则该数组的大小至少为(请作答此空);若采用三叉链表存储该二叉树(各个结点包括结点的数据、父结点指针、左孩子指针、右孩子指针),则该链表的所有结点中空指针的数目为( )。

A.6
B.10
C.12
D.15

答案:D
解析:
采用顺序存储结构存储二叉树时,一般的二叉树也必须按照完全二叉树的形式存储,需要填上一些不存在的"虚结点"。题中二叉树的高度为4,需要的存储空间为24-1=15,如下:

可见,空指针的数目为8。

更多相关问题