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

题目

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

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


相似考题
更多“二叉树如右图所示,若进行顺序存储(即用一维数组元素存储该二叉树中的结点且通过下标反映结点间的 ”相关问题
  • 第1题:

    在完全二叉树的顺序存储中,若结点i有左子女,则其左子女是结点 【 】。


    正确答案:2i
    2i

  • 第2题:

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

    A.

    B.

    C.

    D.


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

  • 第3题:

    对下图所示的二叉树进行顺序存储(根结点编号为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的原则带入图中元素计算。

  • 第4题:

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

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

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

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

  • 第5题:

    对下图所示的二叉树进行顺序存储(根结点编号为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
    解析:
    元素G为F的右子树,其下标为2F+1 ; F为元素E的右子树,其下标为2E+1, E的下标为2,因此G=2* (2*2+1) +1=11 ; K=2G=22 ; H=2G+1=23 ;

  • 第6题:

    若某完全二叉树采用顺序存储结构,结点信息存放的次序是A,C,B,E,F,D,则该二叉树的后序遍历序列为()


    正确答案:E,F,C,D,B,A

  • 第7题:

    用一维数组存储二叉树时,总是以前序遍历存储结点。


    正确答案:错误

  • 第8题:

    在对二叉树进行顺序存储时,若下标为6的结点P既有双亲结点,又有左孩子结点和右孩子结点,则P的双亲结点的下标为(),左孩子结点的下标为(),右孩子结点的下标为()


    正确答案:3;12;13

  • 第9题:

    填空题
    若某完全二叉树采用顺序存储结构,结点信息存放的次序是A,C,B,E,F,D,则该二叉树的后序遍历序列为()

    正确答案: E,F,C,D,B,A
    解析: 暂无解析

  • 第10题:

    填空题
    在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为(),若假定p为一个数组a中的下标,则其后继结点的下标为()。

    正确答案: p->next,a[p].next
    解析: 暂无解析

  • 第11题:

    判断题
    用一维数组存储二叉树时,总是以前序遍历存储结点。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第12题:

    填空题
    若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一维数组a中,即编号为0的结点存储到a[0]中,其余类推,则a[i]元素的左孩子元素为(),右孩子元素为(),双亲元素(i>0)为()。

    正确答案: A[2*i+1],a[2*i+2],a[i/2]
    解析: 暂无解析

  • 第13题:

    阅读以下说明和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]”。

  • 第14题:

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

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

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

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

  • 第15题:

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

    A.d<12n/(k-n)
    B.d>12n/(k-n)
    C.d<12n/(k+n)
    D.d>12n/(k+n)

    答案:A
    解析:

  • 第16题:

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

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

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

  • 第17题:

    对下面的二叉树进行顺序存储(用数组 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

    答案:D
    解析:
    以下列二叉树的顺序存储如下图:

  • 第18题:

    若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一维数组a中,即编号为0的结点存储到a[0]中,其余类推,则a[i]元素的左孩子元素为(),右孩子元素为(),双亲元素(i>0)为()。


    正确答案:A[2*i+1];a[2*i+2];a[i/2]

  • 第19题:

    假定一棵二叉树顺序存储在一维数组a中,但让编号为1的结点存入a[0]元素中,让编号为2的结点存入a[1]元素中,其余类推,则编号为i结点的左孩子结点对应的存储位置为(),若编号为i结点的存储位置用j表示,则其左孩子结点对应的存储位置为()。


    正确答案:2i-1;2j+1

  • 第20题:

    在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为(),若假定p为一个数组a中的下标,则其后继结点的下标为()。


    正确答案:p->next;a[p].next

  • 第21题:

    填空题
    假定一棵二叉树顺序存储在一维数组a中,但让编号为1的结点存入a[0]元素中,让编号为2的结点存入a[1]元素中,其余类推,则编号为i结点的左孩子结点对应的存储位置为(),若编号为i结点的存储位置用j表示,则其左孩子结点对应的存储位置为()。

    正确答案: 2i-1,2j+1
    解析: 暂无解析

  • 第22题:

    填空题
    在对二叉树进行顺序存储时,若下标为6的结点P既有双亲结点,又有左孩子结点和右孩子结点,则P的双亲结点的下标为(),左孩子结点的下标为(),右孩子结点的下标为()

    正确答案: 3,12,13
    解析: 由二叉树的性质⑤可知,若对任一完全二叉树上的所有结点按层从左向右编号,则结点编号之间的数值关系可以准确地反映结点之间的逻辑关系。因此,对于完全二叉树的顺序存储来说,采用的是“以编号为地址”的策略将结点存入作为顺序存储结构的一维数组,即将编号为i的结点存入一维数组的第i个单元。利用二叉树的性质⑤可求出结果

  • 第23题:

    判断题
    用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
    A

    B


    正确答案:
    解析: 暂无解析