浙大PAT 1020. Tree Traversals (25)

来源:互联网 发布:一个人能备案几个域名 编辑:程序博客网 时间:2024/06/06 16:47

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:
72 3 1 5 7 6 41 2 3 4 5 6 7
Sample 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;}elsecout << " " << 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;}



0 0
原创粉丝点击