void PerOrder(BiTree T){
if(T!=NULL){
visit(T);
PerOrder(T->lchild);
PerOrder(T->rchild);
}
}
void PerOrder(BiTree T){
BiTree p=T;
InitStack(S);
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){
if(T!=NULL){
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
void InOrder(BiTree T){
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){
if(T!=NULL){
PostOrder(T-lchild);
PostOrder(T-rchild);
visit(T);
}
}
void PostOrder(BiTree T){
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->data);
r=p;
p=NULL;
}
}
}
}
void LevelOrder(BiTree T){
InitQueue(Q);
BiTree p;
EnQueue(Q,T);
while(!isEmpty(Q)){
DeQueue(Q,p);
visit(p);
if(p->lchild!=NULL){
EnQueue(Q,p->lchild);
}
if(p->rchild!=NULL){
EnQueue(Q,p->rchild);
}
}
}