阅读下列函数说明和C函数,将应填入(n)处的字句写对应栏内。[说明]二叉树的二叉链表存储结构描述如下:typedef struct BiTNode{ datatype data;struct BiTNode *lchild, * rchild; /*左右孩子指针*/}BiTNode,* BiTree;对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:(1) 访问该元素所指结点;(2) 若该元素所指结点的左、右孩子结点非空

题目

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

[说明]

二叉树的二叉链表存储结构描述如下:

typedef struct BiTNode

{ datatype data;

struct BiTNode *lchild, * rchild; /*左右孩子指针*/

}BiTNode,* BiTree;

对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:

(1) 访问该元素所指结点;

(2) 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。

此过程不断进行,当队列为空时,二叉树的层次遍历结束。

下面的函数实现了这一遍历算法,其中Visit(datatype a)函数实现了对结点数据域的访问,数组queue[MAXNODE]用以实现队列的功能,变量front和rear分别表示当前队首元素和队尾元素在数组中的位置。

[函数]

void LevelOrder(BiTree bt) /*层次遍历二叉树bt*/

{ BiTree Queue[MAXNODE];

int front,rear;

if(bt= =NULL)return;

front=-1;

rear=0;

queue[rear]=(1);

while(front (2) ){

(3);

Visit(queue[front]->data); /*访问队首结点的数据域*/

if(queue[front]—>lchild!:NULL)

{ rear++;

queue[rear]=(4);

}

if(queue[front]->rchild! =NULL)

{ rear++;

queue[rear]=(5);

}

}

}


相似考题
更多“阅读下列函数说明和C函数,将应填入(n)处的字句写对应栏内。[说明] 二叉树的二叉链表存储结构描述 ”相关问题
  • 第1题:

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

    【说明】

    下面的程序构造一棵以二叉链表为存储结构的二叉树。

    【函数】

    BitTree *createbt(BitTree *bt)

    {

    BitTree *q;

    struct node *s[30];

    int j,i;

    char x;

    printf("i,x=");

    scant("%d,%c",&i,&x);

    while(i!=0 && x!='$')

    {

    q=(BitTree *}malloc(sizeof(BitTree));//生成一个结点

    (1);

    q->lchild=NULL;

    q->rchild=NULL;

    (2) ;

    if ((3))

    {

    j=i/2; // j为i的双亲结点

    if(i%2==0)

    (4); //i为j的左孩子

    else

    (5); //i为j的右孩子

    }

    printf("i,x=");

    scanf("%d,%c",&i,&x);

    }

    return s[i];

    }


    正确答案:(1)q->data=x (2)s[i]=q (3)i!=1 (4)s[j]->lchild=q (5)s[j]->rchild=q
    (1)q->data=x (2)s[i]=q (3)i!=1 (4)s[j]->lchild=q (5)s[j]->rchild=q 解析:本题考查二叉树的构造。
    题目要求构造一棵二叉树,而二叉树的性质如下:如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n),有:
    (1)如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲是结点[i/2]。
    (2)如果2i>n,则结点i为叶子结点,无左孩子:否则,其左孩子是结点2i。
    (3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。
    下面我们来看程序。程序中声明了一个结点指针数组,用来保存生成的树中结点。用从键盘输入的方式来确定要插入的字符x和此结点在二叉树中的位置i(这个位置是指在完全二叉树中编号的位置)。
    第(1)空是在生成一个新结点后的操作,生成了一个新结点后,自然要将从键盘输入的字符x值存放进来,以及修改结点的两个指针域。程序中指针域都赋了空,因此,第(1)空的任务应该是将字符x写进来,因此,此空答案为q->data=x。
    第(2)空是在对结点完成操作后的操作,根据题目意思,生成的结点应该要保存到数组s中,此数组是一个指针数组,保存结点时,是将结点的地址保存进数组中相应的位置,因此,此空答案为s[il=q。
    第(3)空是条件判断语句的条件,结合下面的程序可以知道,此条件语句用来判断当前结点是不是根结点,如果不是,才执行条件语句中的内容。根据上面的分析,如果i=1,则结点i无双亲,是二叉树的根,因此,此空的答案为i!=1。
    第(4)空处后面有注释,说明i是j的左孩子结点,这个时候我们应该让j结点的左孩子指针指向结点i,此空就是要实现这一功能。而结点,j被存放在数组s中的第j个位置,因此,此空答案为s[i]->lchild=q。
    从程序中很容易看出,第(5)空与第(4)空功能相似,只是说i是j的右孩子结点,因此,让j结点的右孩子指针指向结点乙此空答案为s[j]->rchild=q。

  • 第2题:

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

    【说明】

    下面的程序构造一棵以二叉链表为存储结构的二叉树算法。

    【函数】

    BTCHINALR *createbt ( BTCHINALR *bt )

    {

    BTCHINALR *q;

    struct node1 *s [30];

    int j,i;

    char x;

    printf ( "i,x =" ); scanf ( "%d,%c",&i,&x );

    while (i!=0 && x!='$')

    { q = ( BTCHINALR* malloc ( sizeof ( BTCHINALR )); //生成一个结点

    (1);

    q->1child = NULL;

    q->rchild = NULL;

    (2);

    if((3);)

    {j=i/2 //j为i的双亲结点

    if(i%2==0

    (4) //i为j的左孩子

    else

    (5) //i为j的右孩子

    }

    printf ( "i,x =" ); scanf ( "%d,%c",&i,&x ); }

    return s[1]

    }


    正确答案:(1)q->data=x (2) s[i]=q (3) i!=1 (4) s[j]->1child=q (5) s[j]->rchild=q
    (1)q->data=x (2) s[i]=q (3) i!=1 (4) s[j]->1child=q (5) s[j]->rchild=q

  • 第3题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析:

  • 第4题:

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

    [说明]

    二叉树的二叉链表存储结构描述如下:

    lypedef struct BiTNode

    { datatype data;

    street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree;

    下列函数基于上述存储结构,实现了二叉树的几项基本操作:

    (1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树;

    (2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x;

    (3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针;

    (4) frceAll(BiTree p):释放二叉树全体结点空间。

    [函数]

    BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p;

    if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;

    p->data=x;

    p->lchild=lbt;

    p->rchild=rbt;

    (1);

    }

    BiTree InsertL(BiTree bt, elemtype x,BiTree parent)

    { BiTree p;

    if (parent= =NULL) return NULL;

    if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;

    p->data=x;

    p->lchild= (2);

    p->rchild= (2);

    if(parent->lchild= =NULL) (3);

    else{

    p->lchild=(4);

    parent->lchild=p;

    }

    return bt;

    }

    BiTree DeleteL(BiTree bt, BiTree parent)

    { BiTree p;

    if (parent= =NULL||parent->lchild= =NULL) return NULL;

    p= parent->lchild;

    parent->lchild=NULL;

    freeAll((5));

    return bt;


    正确答案:(1) return p (2) NULL (3) parent->lchild=p (4) parent->lchild (5) p
    (1) return p (2) NULL (3) parent->lchild=p (4) parent->lchild (5) p 解析:(1)此处应返回新建的二叉树;(2)新元素结点初始化时,数据域取值x,左右孩子指针指向NULL;
    (3)若parent结点的左孩子结点空,则直接令其左孩子指针指向p;
    (4)若parent结点的左孩子结点不空,则让新结点p充当其左子树的根;
    (5)此处需释放二叉树p(parent的左子树)所占用的空间。

  • 第5题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案: