#include<stdio.h> #include<stdlib.h> #include<queue> typedef struct node{ int value; struct node* left; struct node* right; }node; using namespace std; node* f(int in[],int post[],int length){ node* root=(node*)malloc(sizeof(node)); root->value=post[length-1]; int flag; for(int i=0;i<length;i++){ if(post[length-1]==in[i]){ flag=i; break; } } if(flag!=0){ root->left=f(in,post,flag); } else root->left=NULL; if(length-flag-1!=0){ root->right=f(in+flag+1,post+flag,length-flag-1); } else root->right=NULL; return root; } void traversal(node* root){ int flag=0; queue<node*> q; q.push(root); while(q.empty()==false){ node* tmp=q.front(); q.pop(); if(tmp->left) q.push(tmp->left); if(tmp->right) q.push(tmp->right); if(flag==0){ flag=1; } else printf(" "); printf("%d",tmp->value); } } int main(){ int n; scanf("%d",&n); int post[n],in[n]; for(int i=0;i<n;i++){ scanf("%d",post+i); } for(int i=0;i<n;i++){ scanf("%d",in+i); } node* root=f(in,post,n); traversal(root); return 0; }
原文:http://www.cnblogs.com/lsj2020/p/6517248.html