阅读下列说明和C程序,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse函数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,

admin2014-10-11  39

问题 阅读下列说明和C程序,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse函数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。函数中使用的预定义符号如下:
    typedef  struct BiTNode{
    int data;
    struct BiTNode*lChild,  *rChild;
    }BiTNode,  *BiTree;
    typedef struct sNode(/*链栈的节点类型*/
    BiTree elem;
    struct  SN0de  *next;
    }SNode;
    【函数】
    int  InorderTraverse(BiTree  root)
    {
    BiTree p;
    sNode*q,*stop=NuLL;/*不带头节点的单链表作为栈的存储结构*/
    p=root;
    while(p!=NULL ||stop  !=NULL){
    if(1){    /*不是空树*/
    q=  (SNode*)malloc(sizeof q);
    if(q==NULL)return一1;
    /*根节点指针入栈*/
    (2);
    q一>elem=p;
    stop=q;
    p=  (3);    /*进入根的左子树*/
    )else(
    q=Stop;
    (4);    /*栈顶元素出栈*/
    printf(“%d”,q一>elem一>data);  /*访问根节点*/
    p=  (5);    /*进入根的右子树*/
    free(q);    /*释放原栈项元素*/
   }/if*/
    )/*while*/
    return0;
    }/*InOrderTraverse*/
从下列的3道试题(试题五至试题七)中任选1道解答。如果解答的试题数超过1道,则题号小的l道解答有效。

选项

答案(1)P!=NULL (2)q->next=stop (3)p->lChild (4)stop=stop一>next (5)q->elem一>rChild

解析 本题考察的是二叉树的遍历以及链栈的使用。由注释可知,空(1)是“不是空树”的条件,应填P!=NULL。空(2)是链栈入栈操作,stop是指向链栈栈顶的指针,故空(2)应填q一>next=stop。空(3)进入根的左子树,故应填P一>lChild。空(4)是链栈出栈操作,stop是指向链栈栈顶的指针,出栈后,应修改栈顶指针,故应填stop=stop一>next。空(5)是进入右子树,要注意的是,此处是通过链栈节点q进行访问,不能想当然的认为是q一>rChild,而应该是q一>elem一>rChild。
转载请注明原文地址:https://jikaoti.com/ti/8Ui7FFFM
0

相关试题推荐
最新回复(0)