先序遍历
void PreOrder(BiTree T){
InitStack(S);
BiTree p=T;
while(p!=NULL||!isempty(S)){
if(p){
print(p);
push(S,p);
p=p->lchild;
}
else{
pop(S,p);
p=p->rchild;
}
}
}
中序遍历
void InOrder(BiTree T){
InitStack(S);
BiTree p=T;
while(p!=NULL||!isempty(S)){
if(p){
push(S,p);
p=p->lchild;
}
else{
pop(S,p);
print(p);
p=p->rchild;
}
}
}
后序遍历
void PostOrder(BiTree T){
InitStack(S);
BiTree p=T;
BiTree r=NULL;
while(p!=NULL||!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);
print(p);
r=p;
p=NULL;
}
}
}
}