二叉树结构体定义
typedef struct BiTNode{
ElemType data;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode,*BiTree;
先序遍历
void PreOrder(BiTree T){
stack<BiTree> S;
BiTree p=T;
while(p||!S.empty()){
while(p){
visit(p);
S.push(p);
p=p->lchild;
}
if(!S.empty()){
p=S.top();
S.pop();
p=p->rchild;
}
}
}
中序遍历
void InOrder(BiTree T){
stack<BiTree> S;
BiTree p=T;
while(p||!S.empty()){
while(p){
S.push(p);
p=p->lchild;
}
if(!S.empty()){
p=S.top();
visit(p);
S.pop();
p=p->rchild;
}
}
}
后序遍历
void PostOrder(BiTree T){
stack<BiTree> S1,S2;
BiTree p=T;
while(p||!S1.empty()){
while(p){
S1.push(p);
S2.push(p);
p=p->rchild;
}
if(!S1.empty()){
p=S1.top();
S1.pop();
p=p->lchild;
}
}
while(!S2.empty()){
p=S2.top();
visit(p);
S2.pop();
}
}
层次遍历
void LevelOrder(BiTree T){
if(!T)
return;
queue<BiTree> Q;
BiTree p;
Q.push(T);
while(!Q.empty()){
p=Q.front();
Q.pop();
visit(p);
if(p->lchild)
Q.push(p->lchild);
if(p->rchild)
Q.push(p->rchild);
}
}