#include<iostream>
#include<stdlib.h>
#define maxSize 100
using namespace std;
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void Visit(BTNode *p)//访问结点
{
cout<<p->data;
}
void CreateBiTree(BTNode *&T,string preorder,string inorder)//创建二叉树
{
if(preorder.length()==0)
{
T=NULL;
return ;
}
char r=preorder[0];
int id=inorder.find(r);
string l_inorder=inorder.substr(0,id);
string r_inorder=inorder.substr(id+1);
int l_length=l_inorder.length();
int r_length=r_inorder.length();
string l_preorder=preorder.substr(1,l_length);
string r_preorder=preorder.substr(1+l_length);
T=(BTNode*)malloc(sizeof(BTNode));
if(T!=NULL)
{
T->data=r;
CreateBiTree(T->lchild,l_preorder,l_inorder);
CreateBiTree(T->rchild,r_preorder,r_inorder);
}
}
void level(BTNode *p)//层次遍历
{
int front,rear;
BTNode *que[maxSize];
front=rear=0;
BTNode *q;
if(q!=NULL)
{
rear=(rear+1)%maxSize;
que[rear]=p;
while(front!=rear)
{
front=(front+1)%maxSize;
q=que[front];
Visit(q);
if(q->lchild!=NULL)
{
rear=(rear+1)%maxSize;
que[rear]=q->lchild;
}
if(q->rchild!=NULL)
{
rear=(rear+1)%maxSize;
que[rear]=q->rchild;
}
}
}
}
int main()
{
string pre="ABCDEFGH";//前序
string in="CBEDFAHG";//中序
BTNode *T;
CreateBiTree(T,pre,in);
level(T);
}