#include<iostream>
#include<cstdlib>
#include<queue>
using namespace std;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
//二叉树的建立
void BuildBiTNode(BiTree *T)
{
TElemType m;
cin>>m;
if(m=='#')
*T=NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data=m;
BuildBiTNode(&(*T)->lchild);
BuildBiTNode(&(*T)->rchild);
}
}
//前序遍历二叉树
void PreOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
if(T)
{
cout<<T->data<<" ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历二叉树
void InOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
//后序遍历二叉树
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data<<" ";
}
}
//层序遍历二叉树
void SequenceTraverse(BiTree T)
{
BiTree b;
queue<BiTree> s;
if(T!=NULL)
s.push(T);
while(!s.empty())
{
b=s.front();
cout<<b->data<<" ";
s.pop();
if(b->lchild)
s.push(b->lchild);
if(b->rchild)
s.push(b->rchild);
}
}
int main()
{
BiTree T=NULL;
BuildBiTNode(&T);
cout<<"前序遍历为:"<<endl;
PreOrderTraverse(T);
cout<<endl;
cout<<"中序遍历为:"<<endl;
InOrderTraverse(T);
cout<<endl;
cout<<"后序遍历为:"<<endl;
PostOrderTraverse(T);
cout<<endl;
cout<<"层序遍历为:"<<endl;
SequenceTraverse(T);
return 0;
}
//124##5##36##7##
#include<cstdlib>
#include<queue>
using namespace std;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
//二叉树的建立
void BuildBiTNode(BiTree *T)
{
TElemType m;
cin>>m;
if(m=='#')
*T=NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data=m;
BuildBiTNode(&(*T)->lchild);
BuildBiTNode(&(*T)->rchild);
}
}
//前序遍历二叉树
void PreOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
if(T)
{
cout<<T->data<<" ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历二叉树
void InOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
//后序遍历二叉树
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data<<" ";
}
}
//层序遍历二叉树
void SequenceTraverse(BiTree T)
{
BiTree b;
queue<BiTree> s;
if(T!=NULL)
s.push(T);
while(!s.empty())
{
b=s.front();
cout<<b->data<<" ";
s.pop();
if(b->lchild)
s.push(b->lchild);
if(b->rchild)
s.push(b->rchild);
}
}
int main()
{
BiTree T=NULL;
BuildBiTNode(&T);
cout<<"前序遍历为:"<<endl;
PreOrderTraverse(T);
cout<<endl;
cout<<"中序遍历为:"<<endl;
InOrderTraverse(T);
cout<<endl;
cout<<"后序遍历为:"<<endl;
PostOrderTraverse(T);
cout<<endl;
cout<<"层序遍历为:"<<endl;
SequenceTraverse(T);
return 0;
}
//124##5##36##7##