当前位置:   article > 正文

7-10 树的遍历 (25 分)_7-24 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历

7-24 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

  1. 7
  2. 2 3 1 5 7 6 4
  3. 1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>f[30];
  4. void Sort(int n, vector<int>late, vector<int>mid)
  5. {
  6. if (late.empty())return;
  7. vector<int>a, b;
  8. int root = late[late.size() - 1];
  9. f[n].push_back(root);
  10. int i = 0;
  11. for (; mid[i] != root; i++)
  12. {
  13. a.push_back(late[i]);
  14. b.push_back(mid[i]);
  15. }
  16. i++;
  17. Sort(n + 1, a, b);
  18. a.clear();
  19. b.clear();
  20. for (; i<late.size(); i++)
  21. {
  22. a.push_back(late[i-1]);
  23. b.push_back(mid[i]);
  24. }
  25. Sort(n + 1, a, b);
  26. }
  27. int main()
  28. {
  29. int N;
  30. cin >> N;
  31. vector<int>x, y;
  32. for (int i = 0; i < 2; i++)
  33. {
  34. for (int j = 0; j < N; j++)
  35. {
  36. int t;
  37. cin >> t;
  38. i == 0 ? x.push_back(t) : y.push_back(t);
  39. }
  40. }
  41. Sort(0, x, y);
  42. int flag = 0;
  43. for (int k = 0; k < 30; k++)
  44. {
  45. if (!f[k].empty())
  46. {
  47. for (int l = 0; l < f[k].size(); l++)
  48. {
  49. if (flag == 0)flag = 1;
  50. else cout << " ";
  51. cout << f[k][l];
  52. }
  53. }
  54. else break;
  55. }
  56. return 0;
  57. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/663474
推荐阅读
相关标签
  

闽ICP备14008679号