当前位置:   article > 正文

7-1 根据后序和中序遍历输出先序遍历(25 分)_7-1 根据后序和中序遍历输出先序遍历 分数 25

7-1 根据后序和中序遍历输出先序遍历 分数 25
7-1 根据后序和中序遍历输出先序遍历(25 分)

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

输入格式:

第一行给出正整数N(30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。

输出格式:

在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。

输入样例:

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

输出样例:

Preorder: 4 1 3 2 6 5 7

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int hou[1000];
  4. int zhong[1000];
  5. struct Tree{
  6. int data;
  7. struct Tree *left,*right;
  8. };
  9. struct Tree *creat(int h1,int h2,int z1,int z2){
  10. struct Tree *T;
  11. int i;
  12. int num;
  13. if(h1>h2){
  14. T=NULL;
  15. }else{
  16. T=(struct Tree *)malloc(sizeof(struct Tree));
  17. T->data=hou[h2];
  18. for(i=z1;i<=z2;i++){
  19. if(zhong[i]==hou[h2])
  20. break;
  21. }
  22. num=i-z1;
  23. T->left=creat(h1,h1+num-1,z1,i);
  24. T->right=creat(h1+num,h2-1,i+1,z2);
  25. //起初这段代码 存在错误,错误在于 T->right=creat(h1+num,h2-1,z1+num,z2);
  26. //中序的起始位置不正确,i的位置为根的位置,中序右子树的起始位置应该为根的右面第一个数据
  27. }
  28. return T;
  29. }
  30. void xianxu(struct Tree *T){
  31. if(T){
  32. printf(" %d",T->data);
  33. xianxu(T->left);
  34. xianxu(T->right);
  35. }
  36. }
  37. int main(){
  38. struct Tree *T;
  39. int n;
  40. int i;
  41. cin>>n;
  42. for(i=0;i<n;i++){
  43. cin>>hou[i];
  44. }
  45. for(i=0;i<n;i++){
  46. cin>>zhong[i];
  47. }
  48. T=creat(0,n-1,0,n-1);
  49. cout<<"Preorder:";
  50. xianxu(T);
  51. cout<<endl;
  52. }

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

闽ICP备14008679号