1020 Tree Traversals(中序后序确定先序/层序)

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

Reference:

https://blog.csdn.net/liuchuo/article/details/52137796

#include<iostream>
#include<vector>

using namespace std;

int pre[31], in[31], post[31];
vector<int> level(100000, -1);

void Pre(int root, int start, int end, int index){
	if(start > end) return ;
	int i = start;
	while(i < end && in[i] != post[root]) i++;
	level[index] = post[root];
	Pre(root - (end - i + 1), start, i - 1, 2 * index + 1);
	Pre(root - 1, i + 1, end, 2 * index + 2);
}

int main(){
	int N, cnt = 0;
	cin >> N;
	for(int i = 0; i < N; i++) cin >> post[i];
	for(int i = 0; i < N; i++) cin >> in[i];
	Pre(N - 1, 0, N - 1, 0);
	for(int i = 0; i < level.size(); i++){
		if(level[i] != -1){
			if(cnt != 0) cout << " ";
			cout << level[i];
			cnt++;
		}
		if(cnt == N) break;
	}
	return 0;
}
发布了135 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/LightInDarkness/article/details/87739874