题意:
已知前序中序求后续
分析:
通过前序中序构造二叉树,递归遍历输出
代码:
构造:
Node *Creat(int *a,int *b,int n){
Node *t;
for(int i=0;i<n;i++){
if(a[0]==b[i]){
t=(Node *)malloc(sizeof(Node));
t->Num=b[i];
t->left=Creat(a+1,b,i);
t->right=Creat(a+i+1,b+i+1,n-i-1);
return t;
}
}
return NULL;
}
遍历:
void Last(Node *t){
if(t!=NULL){
Last(t->left);
Last(t->right);
if(t==Start){
printf("%d\n",t->Num);
}else printf("%d ",t->Num);
}
}
总:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 100005
#define M 15005
#define LL long long
#define Mod 9973
struct Node{
int Num;
Node *left;
Node *right;
}*Start;
int n;
int first[N];
int mid[N];
Node *Creat(int *a,int *b,int n){
Node *t;
for(int i=0;i<n;i++){
if(a[0]==b[i]){
t=(Node *)malloc(sizeof(Node));
t->Num=b[i];
t->left=Creat(a+1,b,i);
t->right=Creat(a+i+1,b+i+1,n-i-1);
return t;
}
}
return NULL;
}
void Last(Node *t){
if(t!=NULL){
Last(t->left);
Last(t->right);
if(t==Start){
printf("%d\n",t->Num);
}else printf("%d ",t->Num);
}
}
int main(){
while(cin>>n){
Start=NULL;
for(int i=0;i<n;i++){
cin>>first[i];
}
for(int i=0;i<n;i++){
cin>>mid[i];
}
Start = Creat(first,mid,n);
Last(Start);
}
}