码迷,mamicode.com
首页 > 其他好文 > 详细

1020. Tree Traversals (25)

时间:2015-12-06 11:20:08      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

根据两种遍历方式建立二叉树
层遍历二叉树

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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

 
  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4. int a[32], b[32];
  5. struct Node {
  6. int val;
  7. Node *left;
  8. Node *right;
  9. };
  10. Node* BuildTree(int *da,int *db,int n) {
  11. int i, j;
  12. if (n <= 0)
  13. return NULL;
  14. for (i = 0; i < n; i++) {
  15. if (*(db + i) == *(da + n - 1))
  16. break;
  17. }
  18. //important
  19. Node *nodeTemp = (Node*)malloc(sizeof(Node));
  20. nodeTemp->val = *(db + i);
  21. nodeTemp->left = BuildTree(da, db, i);
  22. nodeTemp->right = BuildTree(da + i, db + i + 1, n - i - 1);
  23. return nodeTemp;
  24. }
  25. int main(void) {
  26. int n;
  27. cin >> n;
  28. for (int i = 0; i < n; i++) {
  29. cin >> a[i];
  30. }
  31. for (int i = 0; i < n; i++) {
  32. cin >> b[i];
  33. }
  34. Node* root = (Node*)malloc(sizeof(Node));
  35. root = BuildTree(a, b, n);
  36. queue<Node*> level;
  37. level.push(root);
  38. int flag = 0;
  39. while (true)
  40. {
  41. if (level.front()->left != NULL)
  42. level.push(level.front()->left);
  43. if (level.front()->right != NULL)
  44. level.push(level.front()->right);
  45. cout << level.front()->val;
  46. level.pop();
  47. if (level.empty())
  48. break;
  49. cout << " ";
  50. }
  51. return 0;
  52. }





1020. Tree Traversals (25)

标签:

原文地址:http://www.cnblogs.com/zzandliz/p/5023063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!