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