#include<iostream>
#include<fstream>
#include<queue>
#include<stack>
using namespace std;
/*******************树的节点定义为BiTNode,二叉树定义为BiTree**********/
typedef int ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
/*******************函数声明*****************************************/
void CreateBiTree(BiTree &T);
void PreOrderTraverse(BiTree T);
void InOrderTraverse(BiTree T);
void PostOrderTraverse(BiTree T);
void LevelOrderTraverse(BiTree T);
/*******************文件操纵流***************************************/
ifstream infile("C:\Users\Administrator\Desktop\数据结构\树\数据2.txt");
int main()
{
BiTree T;
CreateBiTree(T);
// PreOrderTraverse(T);
// InOrderTraverse(T);
// LevelOrderTraverse(T);
return 0;
}
/********************构造二叉树************************************/
void CreateBiTree(BiTree &T)
{
ElemType x;
cin>>x;
if(x==0)
T=NULL;
else
{
T=new BiTNode;
T->data=x;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
#if 0
/******************递归遍历二叉树**************************/
void PreOrderTraverse(BiTree T)
{
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->lchild);
cout<<T->data;
PreOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
cout<<T->data;
}
}
#else
/********************非递归遍历二叉树**************************/
void PreOrderTraverse(BiTree T)
{
stack<BiTree> s;
BiTree p=T;
while(p||!s.empty())
{
if(p)
{
cout<<p->data;
s.push(p);
p=p->lchild;
}
else
{
p=s.top();
s.pop();
p=p->rchild;
}
}
}
void InOrderTraverse(BiTree T)
{
stack<BiTree> s;
BiTree p=T;
while(p||!s.empty())
{
if(p)
{
s.push(p);
p=p->lchild;
}
else
{
p=s.top();
cout<<p->data;
s.pop();
p=p->rchild;
}
}
}
void LevelOrderTraverse(BiTree T)
{
queue<BiTree> q;
BiTree p=NULL;
q.push(T);
while(!q.empty())
{
p=q.front();
q.pop();
cout<<p->data;
if(p->lchild)
q.push(p->lchild);
if(p->rchild)
q.push(p->rchild);
}
}
#endif