当前位置:   article > 正文

树的遍历_输入第一行给出一个正整数n(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出…

输入第一行给出一个正整数n(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出…
5-10 树的遍历   (25分)

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

输入格式:

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

输出格式:

在一行中输出该树的层序遍历的序列。数字间以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 <cstdio>
  2. #include <cstring>
  3. #include <queue>
  4. #include <iostream>
  5. using namespace std;
  6. int tree[10000][2];
  7. int in[35],post[35];
  8. int BuildTree(int in[],int post[],int n){
  9. int i,node=post[n-1];
  10. for(i=0;i<n;i++){
  11. if(in[i]==node){
  12. break;
  13. }
  14. }
  15. if(i>0){
  16. tree[node][0]=BuildTree(in,post,i);
  17. }
  18. if(n-i-1>0){
  19. tree[node][1]=BuildTree(in+i+1,post+i,n-i-1);
  20. }
  21. return node;
  22. }
  23. void bfs(int fa){
  24. queue<int> q;
  25. q.push(fa);
  26. cout<<fa;
  27. while(!q.empty()){
  28. int head=q.front();
  29. q.pop();
  30. if(tree[head][0]){
  31. q.push(tree[head][0]);
  32. cout<<' '<<tree[head][0];
  33. }
  34. if(tree[head][1]){
  35. q.push(tree[head][1]);
  36. cout<<' '<<tree[head][1];
  37. }
  38. }
  39. return;
  40. }
  41. int main(){
  42. int fa,n;
  43. cin>>n;
  44. memset(tree,0,sizeof(tree));
  45. for(int i=0;i<n;i++){
  46. cin>>post[i];
  47. }
  48. for(int i=0;i<n;i++){
  49. cin>>in[i];
  50. }
  51. fa=BuildTree(in,post,n);
  52. bfs(fa);
  53. return 0;
  54. }


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

闽ICP备14008679号