当前位置:   article > 正文

7-10 树的遍历(25 分)

7-10 树的遍历思路
7-10 树的遍历(25 分)

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

输入格式:

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

输出格式:

在一行中输出该树的层序遍历的序列。数字间以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<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. #include<stdlib.h>
  5. #include<iostream>
  6. using namespace std;
  7. int btree[100]={0};//用于承装后续遍历的数字
  8. int ctree[100]={0};//用于承装中序遍历的数据
  9. struct node
  10. {
  11. node *l;
  12. node *r;
  13. int data;
  14. };
  15. int num=0;
  16. int n;
  17. node *creattree(int btree[],int ctree[],int n)//反向推算创建二叉树,注意这是指针
  18. {
  19. if(n<=0) return NULL;
  20. node *T=new node();
  21. int root=btree[n-1];//找到根节点
  22. int k;
  23. T->data=root;//创建树的节点
  24. for(int i=0;i<n;i++)//由于中序遍历使两边分开
  25. {
  26. if(ctree[i]==root)
  27. {
  28. k=i;
  29. break;
  30. }
  31. }
  32. T->l=creattree(btree,ctree,k);//左子树
  33. T->r=creattree(btree+k,ctree+k+1,n-(k+1));//右子树
  34. return T;
  35. }
  36. void print(node *T)//层次遍历输出二叉树
  37. {
  38. node *p;//为中间变量
  39. node *pr[100];
  40. int rear=-1,front=-1;
  41. rear++;
  42. pr[rear]=T;//将根节点放入到队列之中
  43. while(rear!=front)
  44. {
  45. front++;
  46. p=pr[front];//用来读取数据
  47. cout<<p->data;
  48. num++;//用来控制空格的输出,最后一位不用空格
  49. if(num<n)
  50. cout<<" ";
  51. if(p->l!=NULL)
  52. {
  53. rear++;
  54. pr[rear]=p->l;
  55. }
  56. if(p->r!=NULL)
  57. {
  58. rear++;
  59. pr[rear]=p->r;
  60. }
  61. }
  62. }
  63. //个人理解,rear是用来存取数据的,而front是跟着屁股后面来输出的
  64.  int main()
  65. {
  66. int N;
  67. int j,k,l;
  68. cin>>N;
  69. n=N;
  70. for(j=0;j<N;j++)
  71. {
  72. cin>>btree[j];
  73. }
  74. for(j=0;j<N;j++)
  75. {
  76. cin>>ctree[j];
  77. }
  78. node *T=creattree(btree,ctree,n);
  79. print(T);
  80. return 0;
  81. }

 

转载于:https://www.cnblogs.com/sunchongwei/p/9567650.html

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

闽ICP备14008679号