1020 Tree Traversals (25 分)从后序和中序得到层次遍历(模版)

Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

Sample Input:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

Sample Output:

4 1 6 3 5 7 2

题意:先输入树的结点个数n,然后在第二行和第三行分别输入树的后序遍历和中序遍历,求树的层序遍历
思路:先建树后层次遍历

#include
#include
#include 
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

const int maxn = 40;
int n;

int pre[maxn],in[maxn],post[maxn];

struct node {
	int data;
	node *left;
	node *right;
};

node* create(int postl,int postr,int inl,int inr) {
	if(postl > postr) {
		return NULL;
	}
	node* root = new node; 
	root->data = post[postr];
	int temp = post[postr];
	int k;
	for(int i = 0;i < n;i++) {
		if(in[i] == temp) {
			k = i;
			break;	
		}
	}
	int numleft = k - inl;
	root->left = create(postl,postl + numleft - 1,inl,k - 1);
	root->right = create(postl + numleft,postr - 1,k + 1,inr);
	return root;
}

int num = 0;
void bfs(node* root) {
	queue<node*> q;
	q.push(root);
	while(!q.empty()) {
		node* now = q.front();
		printf("%d",now->data);
		q.pop();
		num++;
		if(num < n) {
			printf(" ");
		}
		if(now->left != NULL) {
			q.push(now->left);
		}
		if(now->right != NULL) {
			q.push(now->right);
		}
	}
}

int main() {
	memset(pre,0,sizeof(pre));
	memset(in,0,sizeof(in));
	memset(post,0,sizeof(post));
	scanf("%d",&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 = create(0,n - 1,0,n - 1);
	bfs(root);
	return 0;
}

你可能感兴趣的:(PAT甲级)