void NRPostOrder ( BiTree bt ) /*非递归后序遍历二叉树bt*/ { stacktype stack[MAXNODE]; BiTree p; int top,sign; if ( bt==NULL ) return; top=-1 /*栈顶位置初始化*/ p=bt; while ( ! ( p==NULL && top==-1 ) ) { if ( p!=NULL ) /*结点第一次进栈*/ { top++; stack[top].link=p; stack[top].flag=1; p=p->lchild; /*找该结点的左孩子*/ } else { p=stack[top].link; sign=stack[top].flag; top--; if ( sign==1 ) /*结点第二次进栈*/ { top++; stack[top].link=p; stack[top].flag=2; /*标记第二次出栈*/ p=p->rchild; } else { Visite ( p->data ); /*访问该结点数据域值*/ } } } }