#include<iostream>
#include<queue>
using namespace std;
typedef struct BiNode {
char data;
struct BiNode *left,*right;
}BiNode,*BiTree;
void CreateTree(BiTree &T){
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else {
T=new BiNode;
T->data=ch;
CreateTree(T->left);
CreateTree(T->right);
}
}
///先序遍历
void PreOrderTraverse(BiTree T){
if(T==NULL)
return ;
cout<<T->data<<" ";
PreOrderTraverse(T->left);
PreOrderTraverse(T->right);
}
///中序遍历
void InOrderTraverse(BiTree T){
if(T==NULL)
return ;
InOrderTraverse(T->left);
cout<<T->data<<" ";
InOrderTraverse(T->right);
}
///后序遍历
void PostOrderTraverse(BiTree T){
if(T==NULL)
return ;
PostOrderTraverse(T->left);
PostOrderTraverse(T->right);
cout<<T->data<<" ";
}
///层次遍历
void LeverOrderTraverse(BiTree T){
queue<BiNode> q;
if(T!=NULL){
q.push(*T);
while(!q.empty()){
BiNode p;
p=q.front();
q.pop();
cout<<p.data<<" ";
if(p.left!=NULL) q.push(*p.left);
if(p.right!=NULL) q.push(*p.right);
}
}
}
int main()
{
BiTree T;
CreateTree(T);
///先序遍历
PreOrderTraverse(T);
cout<<endl;
///中序遍历
InOrderTraverse(T);
cout<<endl;
///后序遍历
PostOrderTraverse(T);
cout<<endl;
///层次遍历
LeverOrderTraverse(T);
return 0;
}
abc##d##ef##g##
a b c d e f g
c b d a f e g
c d b f g e a
a b e c d f g