先序
void PreOrder2(BiTree b){
InitStack(S);
BiTree p = b;
while(p!=NULL||!IsEmpty(S)){
while(p){
Visit(p);
S.push(p);
p = p->left;
}
if(!Empty(S)){
p = Pop(S);
p = p->right;
}
}
}
中序
void InOrder2(BiTree b){
InitStack(S);
BiTree p = b;
while(p||!Isempty(S)){
while(p){
S.push(p);
p = p->left
}
if(!isempty(S)){
p = Pop(S);
Visit(p);
p = p->right;
}
}
}
后序
void PostOrder2(BiTree b){
InitStack(S);
BiTree p = b, r = NULL;//工作指针和辅助指针
while(p||!IsEmpty(S)){
if(p){
Push(p);
p = p->left;
}
else{
GetTop(S,p);
if(p->right!=NULL&&p->right!=r){
p = p->right;
}
else{
Pop(S,p);
Visit(p);
r = p;
p = NULL;//使P为空从而继续访问栈顶
}
}
}
}
层序
void LevelOrdre(BiTree bt){
InitQueue(Q); //初始化一个队列
BiTree p;//临时变量
EnQueue(bt);//根节点入队
while(!IsEmpty(Q)){//当队列不为空的时候
DeQueue(Q,p);//出队
Visit(p);//访问
if(p->left!=NULL){
EnQueue(Q,p->lefe);
}
if(p->right != NULL){
EnQueue(Q,p->right)
}
}
}