# include<iostream>
using namespace std;
typedef struct BiNode{
int data;
struct BiNode *lchild,*rchild;
}BiNode,*Bitree;
//先序遍历
bool preOrderTraverse(Bitree T){
if(T==NULL) return true;
else{
cout<<T->data;
preOrderTraverse(T->lchild);
preOrderTraverse(T->rchild);
}
}
//中序遍历
bool inOrderTraverse(Bitree T){
if(T==NULL) return true;
else{
inOrderTraverse(T->lchild);
cout<<T->data;
inOrderTraverse(T->rchild);
}
}
//由遍历序列确定二叉树,pa为先序序列,ia为中序序列
Bitree InPretree(int *pa, int *ia, int p1, int p2,int i1,int i2){
if(p1>p2 || i1>i2)
return NULL;
int k=0;
while(pa[p1]!=ia[i1+k]&&i1+k<=i2)//找到中序序列与先序序列相同得元素即为根
++k;
if(i1+k>i2)
return NULL;
Bitree t = new BiNode;
t -> data = pa[p1];
t -> lchild = InPretree(pa,ia,p1+1,p1+k,i1,i1+k-1);
t -> rchild = InPretree(pa,ia,p1+k+1,p2,i1+k+1,i2);
return t;
}
int main(){
int pa[7] = {1,2,4,5,3,6,7};
int ia[7] = {4,2,5,1,6,3,7};
Bitree t = InPretree(pa,ia,0,6,0,6);
inOrderTraverse(t);
return 0;
}