#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#include<malloc.h>
typedef struct Tree
{
int s;
struct Tree *lchild;
struct Tree *rchild;
}Node;
int preorder[1002];
int inorder[1002];
bool IsOk = true;
void postprint(Node *root)
{
if(NULL == root) return;
postprint(root->lchild);
postprint(root->rchild);
printf("%d ",root->s);
}
Node* BuildTree(int *pre, int *ino, int pl, int il)
{
if(0 >= pl) return NULL;
Node *temp = (Node*)malloc(sizeof(Node));
int i=0,j=-1;
temp->s = pre[0];
for(i=0; i<il; i++)
{
if(pre[0] == ino[i])
{
j = i;
break;
}
}
if(-1 == j)
{
IsOk = false;
return NULL;
}
temp->lchild = BuildTree(pre+1, ino, j, j);
temp->rchild = BuildTree(pre+j+1, ino+j+1, pl-j-1, il-j-1);
return temp;
}
int main()
{
int n,i;
while(cin>>n)
{
for(i=0;i<n;i++)
{
scanf("%d",&preorder[i]);
}
for(i=0;i<n;i++)
{
scanf("%d",&inorder[i]);
}
IsOk = true;
Node *root = BuildTree(preorder, inorder, n, n);
if(IsOk == true)
{
postprint(root);
cout<<endl;
}
else cout<<"No"<<endl;
}
return 0;
}
/**************************************************************
Problem: 1385
User: hrdjmax2
Language: C++
Result: Accepted
Time:10 ms
Memory:1528 kb
****************************************************************/
剑指offer之重建二叉树 九度1385
最新推荐文章于 2019-06-14 17:25:17 发布