二叉树四种顺序遍历的非递归程序。
void preOrder2(BiTree bt)
{ //非递归前序遍历
InitStack(s);
BiTree p = bt;
push(s,p);
while(!IsEmpty(s))
{
pop(s,p);
visit(p);
if(p->rchild)
push(s,p->rchild);//需要注意的是,这里先让右孩子进栈,因为栈是后进先出
if(p->lchild)
push(s,p->lchild);
}//while
}//void
void inOrder2(BiTree bt)
{ //非递归中序遍历
InitStack(s);
BiTree p = bt;
while(p||!IsEmtpy(s))
{
if(p)
{
push(s,p);
p = p->lchild;
}
else
{
pop(s,p);
visit(p);
p = p->rchild;
}
}//while
}//void
void postOrder2(BiTree bt)
{ //非递归后序遍历
InitStack(s);
BiTree p = bt;
r = NULL;
while(p||!IsEmtpy(s))
{
if(p){
push(s,p);
p = p->lchild;
}
else{
GetTop(s,p);
if(p->rchild && p->rchild!=r){
p = p->rchild;
push(s,p);
p = p->lchild;
}
else{
pop(s,p);
visit(p);
r = p;
p = NULL;
}
}//else
}//while
}//void
void levelOrder(BiTree bt)
{ //非递归层序遍历
InitQueue(Q);
BiTree p = bt;
EnQueue(Q,p);
while(!IsEmpty(Q))
{
DeQueue(Q,p);
visit(p);
if(p-lchild)
EnQueue(Q,p->lchild);
if(p-rchild)
EnQueue(Q,p->rchild);
}//while
}//void