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 7Sample Output:
4 1 6 3 5 7 2
/* * 题意:已知二叉树的后中序输出层序遍历的结果。 * 通过后中序建立树 bfs输出层序结果即可。 */ #include "iostream" #include "queue" using namespace std; struct Node { int val; Node* l; Node* r; }; typedef Node* Tree; Tree t; Tree buildTree(int* post,int* in,int n) { if (n <= 0) return NULL; int i; for (i = 0; post[n-1]!=in[i]; i++); Tree t = (Tree)malloc(sizeof(struct Node)); t->val = post[n - 1]; t->l = buildTree(post,in,i); t->r = buildTree(post+i,in+i+1,n-i-1); return t; } void bfs() { queue<Tree>q; q.push(t); bool flag = 1; while (!q.empty()) { Tree p = q.front(); if (flag) { cout << p->val; flag = false; } else cout << " " << p->val; if (p->l != NULL) q.push(p->l); if (p->r != NULL) q.push(p->r); q.pop(); } } int main() { int n; int post[31]; int in[31]; cin >> n; for (int i = 0; i < n; i++) cin >> post[i]; for (int i = 0; i < n; i++) cin >> in[i]; t = buildTree( post, in, n); bfs(); cout << endl; return 0; }