#include <stdio.h>
#include <stdlib.h>
typedef struct k
{
int data;
struct k *lc,*rc;
}Btree;
void inputin(int in[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&in[i]);
}
void inputpost(int pos[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&pos[i]);
}
Btree *creatBtree()
{
Btree *t;
int num;
scanf("%d",&num);
if(num==-1)
{
return NULL;
}
t=(Btree *)malloc(sizeof(Btree));
t->data=num;
t->lc=creatBtree();
t->rc=creatBtree();
return t;
}
int finde(int in[],int l,int h,int e)
{
int i;
for(i=l;i<=h;i++)
{
if(in[i]==e)
return i;
}
}
Btree *ctree(int in[],int L1,int H1,int pos[],int L2,int H2)
{
Btree *t;
int i,j;
if(L1>H1)
return NULL;
t=(Btree *)malloc(sizeof(Btree));
t->data=pos[L2];
i=finde(in,L1,H1,t->data);
j=L2+1+(i-L1);
t->lc=ctree(in,L1,i-1,pos,L2+1,j-1);
t->rc=ctree(in,i+1,H1,pos,j,H2-1);
return t;
}
void posprint(Btree *t)
{
if(t==NULL)
return ;
posprint(t->lc);
posprint(t->rc);
printf("%d ",t->data);
}
//1 2 4 5 3 6 7前序输入
//4 2 5 1 6 3 7中序输入
//4 5 2 6 7 3 1后序输出
int main()
{
int in[10];
int pos[10];
inputpost(&pos,7);
inputin(&in,7);
Btree *t;
t=ctree(in,0,6,pos,0,6);
posprint(t);
return 0;
}
二叉树 前序+中序->恢复二叉树后序
最新推荐文章于 2021-12-11 23:20:40 发布