pat1020

  

#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;
} 

  

原文地址:https://www.cnblogs.com/lsj2020/p/6517248.html