Status PostOrderNonRecursionTraverse(BiTree T,Status (*Visit)(ElemType e)){
// 后序遍历二叉树T的非递归算法
SqStack S;
SElemType p,q;
InitStack(&S); Push(&S,T); // 根指针入栈
while(!StackEmpty(S)){
while(GetTop(S,&p)&&p) Push(&S,p->lchild); //向左走到尽头
Pop(&S,&p); //空指针出栈
GetTop(S,&p);
if(p->rchild){
Push(&S,p->rchild);
continue;
}
if(!StackEmpty(S)){//访问结点,向右一步
Pop(&S,&p);
if(!Visit(p->data)) return ERROR;
while (GetTop(S,&q)&&q&&p==q->rchild){//若当前为右子树,则继续出栈
Pop(&S,&p);
if(!Visit(p->data)) return ERROR;
}
GetTop(S,&p);
if(p->rchild){
Push(&S,p->rchild);
continue;
}else{
Pop(&S,&p);
if(!Visit(p->data)) return ERROR;
}
}//if
}//while
DestroyStack(&S);
return OK;
}
这段程序每句话的注释