问答题
 【C函数】
    int    InOrder(BTree root)              /* 实现二叉树的非递归中序遍历  */
    {
    BTree ptr;                   /* ptr用于指向二叉树中的结点  */
    StNode *q;                  /* q暂存链栈中新创建或待删除的结点指针*/
    StNode *stacktop = NULL;    /* 初始化空栈的栈顶指针stacktop */
    ptr = root;                          /* ptr指向二叉树的根结点  */
    while (     (1)       || stacktop != NULL) {
    while (ptr != NULL) {
    q = (StNode *)malloc(sizeof(StNode));
    if (q == NULL)
    return -1;
    q->elem = ptr;
     (2)     ;
    stacktop = q;                /*stacktop指向新的栈顶*/
    ptr =      (3)     ;     /*进入左子树*/
    }
    q = stacktop;
     (4)     ;                  /*栈顶元素出栈*/
    visit(q);                                    /*visit是访问结点的函数,其具体定义省略*/
    ptr =      (5)     ;                /*进入右子树*/
    free(q);                                    /*释放原栈顶元素的结点空间*/
    }
    return 0;
    }/*InOrder*/
【C函数】
    int    InOrder(BTree root)              /* 实现二叉树的非递归中序遍历  */
    {
    BTree ptr;                   /* ptr用于指向二叉树中的结点  */
    StNode *q;                  /* q暂存链栈中新创建或待删除的结点指针*/
    StNode *stacktop = NULL;    /* 初始化空栈的栈顶指针stacktop */
    ptr = root;                          /* ptr指向二叉树的根结点  */
    while (     (1)       || stacktop != NULL) {
    while (ptr != NULL) {
    q = (StNode *)malloc(sizeof(StNode));
    if (q == NULL)
    return -1;
    q->elem = ptr;
     (2)     ;
    stacktop = q;                /*stacktop指向新的栈顶*/
    ptr =      (3)     ;     /*进入左子树*/
    }
    q = stacktop;
     (4)     ;                  /*栈顶元素出栈*/
    visit(q);                                    /*visit是访问结点的函数,其具体定义省略*/
    ptr =      (5)     ;                /*进入右子树*/
    free(q);                                    /*释放原栈顶元素的结点空间*/
    }
    return 0;
    }/*InOrder*/ 
