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
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <string>
#include <set>
#include <map>
using namespace std;
const int maxn = 10000;
int n;
int post[maxn], in[maxn];
struct node {
    int data;
    node* left;
    node* right;
};
void layerorder(node* root) {
    queue<node*> q;
    q.push(root);
    int count = 0;
    while (!q.empty()) {
        node* now = q.front();
        q.pop();
        printf("%d", now->data);
        count++;
        if (now->left != NULL) q.push(now->left);
        if (now->right != NULL) q.push(now->right);
        if (count != n) printf(" ");
    }
}
node* create(int postl, int postr, int inl, int inr) {
    if (postl > postr) {
        return NULL;
    }
    node* root = new node;
    root->data = post[postr];
    int k;
    for (k = inl; k <= inr; k++) {
        if (in[k] == post[postr]) {
            break;
        }
    }
    int leftnum = k - inl;
    root->left = create(postl, postl + leftnum - 1, inl, k-1);
    root->right = create(postl + leftnum, postr - 1, k + 1, inr);
    return root;
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin>>post[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> in[i];
    }
    node* root = create(0, n - 1, 0, n - 1);
    layerorder(root);
    system("pause");
}

注意点:考察基本的二叉树遍历,难点在递归上,想清楚了递归边界和递归式就简单了。二叉树的遍历及建树还需要巩固。