当前位置:   article > 正文

7-10 树的遍历 (25 分)_7-1 二叉树的遍历!(简单) (10 分)

7-1 二叉树的遍历!(简单) (10 分)

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

输入格式:

输入第一行给出一个正整数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<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cctype>
  5. using namespace std;
  6. int n,i;
  7. int h[35],z[35],Tree[100010],mx=0;
  8. typedef struct tree{
  9. int data;
  10. tree *l,*r;
  11. }tree;
  12. int search(int l1,int r1,int l2,int r2)
  13. {
  14. for(int i=l2;i<=r2;i++)
  15. {
  16. if(z[i]==h[r1])
  17. return i;
  18. }
  19. }
  20. tree* creat(int l1,int r1,int l2,int r2,int n,int w)
  21. {
  22. tree* t;
  23. t=(tree*)malloc(sizeof(tree));
  24. t->data=h[r1];
  25. Tree[w]=h[r1];
  26. mx=max(mx,w);
  27. if(n==0)
  28. {
  29. t->l=NULL;
  30. t->r=NULL;
  31. }
  32. else
  33. {
  34. int f;
  35. f=search(l1,r1,l2,r2);
  36. int n1=f-l2,n2=r2-f;
  37. if(f!=l2)
  38. t->l=creat(l1,l1+n1-1,l2,f-1,f-l2,w*2);
  39. else
  40. t->l=NULL;
  41. if(f!=r2)
  42. t->r=creat(l1+n1,r1-1,f+1,r2,r2-f,w*2+1);
  43. else
  44. t->r=NULL;
  45. }
  46. return t;
  47. }
  48. void remove_tree(tree* root)
  49. {
  50. if(root!=NULL)
  51. {
  52. remove_tree(root->l);
  53. remove_tree(root->r);
  54. free(root);
  55. }
  56. }
  57. int main()
  58. {
  59. cin>>n;
  60. memset(Tree,0,sizeof(Tree));
  61. for(i=1;i<=n;i++)
  62. cin>>h[i];
  63. for(i=1;i<=n;i++)
  64. cin>>z[i];
  65. tree* root;
  66. root=creat(1,n,1,n,n,1);
  67. for(i=1;i<=mx;i++)
  68. if(Tree[i]!=0)
  69. {
  70. printf("%d",Tree[i]);
  71. if(i<mx)
  72. printf(" ");
  73. }
  74. remove_tree(root);
  75. return 0;
  76. }

 

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

闽ICP备14008679号