// 先序遍历(非递归)
void PreOrder(BiTree T) {
LinkStack S;
InitStack(S);
BiTree p = T;
while(p || !IsEmpty(S)) {
if(p) {
visit(p);
Push(S, p);
p = p->lchild;
} else {
Pop(S, p);
p = p->rchild;
}
}
}
// 中序遍历(非递归)
void InOrder(BiTree T) {
LinkStack S;
InitStack(S);
BiTree p = T;
while(p || !IsEmpty(S)) {
if(p) {
Push(S, p);
p = p->lchild;
} else {
Pop(S, p);
visit(p);
p = p->rchild;
}
}
}
// 后序遍历(非递归)
void PostOrder(BiTree T) {
LinkStack S;
InitStack(S);
BiTree p = T;
BiTree r = NULL;
while(p || !IsEmpty(S)) {
if(p) {
Push(S, p);
p = p->lchild;
} else {
GetTop(S, p);
if(p->rchild && p->rchild != r) {
p = p->rchild;
} else {
Pop(S, p);
visit(p);
r = p;
p = NULL;
}
}
}
}