
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 ); /*访问该结点数据域值*/
}
}
}
}



