二叉树四种遍历法
#include<bits/stdc++.h>
#include<malloc.h>
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T);
void PreOrder(BiTree T);
void InOrder(BiTree T);
void PostOrder(BiTree T);
void LevelOrder(BiTree T);
int main(){
BiTree T;
CreateBiTree(T);
cout<<"PreOrder:";
PreOrder(T);
cout<<endl<<"InOrder:";
InOrder(T);
cout<<endl<<"PostOrder:";
PostOrder(T);
cout<<endl<<"LevelOrder:";
LevelOrder(T);
return 0;
}
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch == '#'){
T = NULL;
return;
}
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
void PreOrder(BiTree T)
{
if(T == NULL) return;
cout<<T->data;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
void InOrder(BiTree T)
{
if(T == NULL) return;
InOrder(T->lchild);
cout<<T->data;
InOrder(T->rchild);
}
void PostOrder(BiTree T)
{
if(T == NULL) return;
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data;
}
void LevelOrder(BiTree T)
{
queue<BiTree> q;
q.push(T);
while(!q.empty()){
BiTree s = q.front();
cout<<s->data;
if(s->lchild != NULL) q.push(s->lchild);
if(s->rchild != NULL) q.push(s->rchild);
q.pop();
}
}