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
#include <iostream> #include <iostream> #include <queue> using namespace std; /* 二叉树,后序遍历和中序遍历得出层次遍历,首先要恢复树 * */ int preInder[30]; int inInder[30]; int leInder[30]; struct Node { int value; Node *left, *right; Node (int _value): value(_value), left(NULL), right(NULL) { } }; Node *getRoot(int prelow, int prehigh, int inlow, int inhigh) { Node *node = new Node(preInder[prehigh]); int root; for (int i = inlow; i <= inhigh; ++i) { if (preInder[prehigh] == inInder[i]) { root = i; break; } } if (root > inlow) node -> left = getRoot(prelow, prelow + root - inlow - 1, inlow, root - 1); if (root < inhigh) node -> right = getRoot(prelow + root - inlow, prehigh - 1, root + 1, inhigh); return node; } void levelInder(Node *root) { queue<Node*> que; que.push(root); //层次遍历统统用队列 printf("%d", root -> value); while (!que.empty()) { root = que.front(); que.pop(); if (root -> left != NULL) { printf(" %d", root -> left -> value); que.push(root -> left); } if (root -> right != NULL) { printf(" %d", root -> right -> value); que.push(root -> right); } } printf("\n"); } int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) scanf("%d", &preInder[i]); for (int i = 0; i < n; ++i) scanf("%d", &inInder[i]); Node* root = getRoot(0, n - 1, 0 , n - 1); levelInder(root); return 0; }