#include <stdio.h>
#include <stdlib.h>
#include <queue>
using namespace std;
typedef struct BiTNode{
int value;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
BiTree rebuild(
int perorder[],
int perstart,
int perend,
int inorder[],
int instart,
int inend){
if(perend-perstart!=inend-instart){
return NULL;
}
if(perstart>perend){
return NULL;
}
BiTree tree=(BiTree)
malloc(
sizeof(BiTNode));
tree->value=perorder[perend];
tree->lchild=NULL;
tree->rchild=NULL;
if(perstart==perend){
return tree;
}
int index,length;
for(index=instart;index<=inend;index++){
if(perorder[perend]==inorder[index])
break;
}
if(index>inend){
return NULL;
}
if(index>instart){
length=index-instart;
tree->lchild=rebuild(perorder,perstart,perstart+length-
1,inorder,instart,instart+length-
1);
}
if(index<inend){
length=inend-index;
tree->rchild=rebuild(perorder,perend-length,perend-
1,inorder,inend-length+
1,inend);
}
return tree;
}
int dtree(BiTree t){
int deep=
0;
if(t){
int ldeep=dtree(t->lchild);
int rdeep=dtree(t->rchild);
deep=ldeep>=rdeep?ldeep+
1:rdeep+
1;
}
return deep;
}
void bfs(BiTree t){
if(t==NULL){
return;
}
queue<BiTree >q;
q.push(t);
while(!q.empty()){
BiTree s=q.front();
q.pop();
printf(
"%d ",s->value);
if(s->lchild!=NULL){
q.push(s->lchild);
}
if(s->rchild!=NULL){
q.push(s->rchild);
}
}
}
int main(){
int n;
int perorder[
31],inorder[
31];
scanf(
"%d",&n);
getchar();
for(
int i=
0;i<n;i++){
scanf(
"%d",&perorder[i]);
}
for(
int i=
0;i<n;i++){
scanf(
"%d",&inorder[i]);
}
BiTree tree=rebuild(perorder,
0,n-
1,inorder,
0,n-
1);
bfs(tree);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-32850.html