• PAT A1020 Tree Traversals


    1020 Tree Traversals

    分数 25

    作者 CHEN, Yue

    单位 浙江大学

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

    Output Specification:

    For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.

    Sample Input:

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

    Sample Output:

    4 1 6 3 5 7 2

     

    记得一定要为指针分配空间,否则会出现段错误,谨记!

    详细解释请前往另一篇博客:

    给定中序遍历和另外一种遍历方法确定一棵二叉树_疯疯癫癫才自由的博客-CSDN博客_怎么通过中序遍历和后序遍历确定一棵树

    1. #include <iostream>
    2. #include <cstring>
    3. #include <algorithm>
    4. #include <queue>
    5. using namespace std;
    6. typedef struct TNode* Bin;
    7. struct TNode
    8. {
    9. int data;
    10. Bin l,r;
    11. };
    12. const int N = 30;
    13. int beh[N], mid[N];
    14. int flag = 1;
    15. Bin get_tree(int behL, int behR, int midL, int midR)
    16. {
    17. if(behL > behR) //递归边界
    18. return NULL;
    19. //记得一定要为指针分配空间,否则会出现SF错误,谨记!
    20. Bin u = new TNode;
    21. int v = beh[behR];
    22. int k = 0;
    23. for(int i=midL; i<=midR; ++i)
    24. if(mid[i] == v)
    25. {
    26. k = i;
    27. break;
    28. }
    29. int lenL = k - midL; //左子树的节点数目
    30. u->data = v;
    31. //递归左边界
    32. u -> l = get_tree(behL, behL+lenL-1, midL, k-1);
    33. //递归右边界
    34. u -> r = get_tree(behL+lenL, behR-1, k+1, midR);
    35. return u;
    36. }
    37. void level_traver(Bin root)
    38. {
    39. queue<Bin> q;
    40. q.push(root);
    41. while(q.size())
    42. {
    43. Bin top = q.front();
    44. q.pop();
    45. if(flag)
    46. flag = 0;
    47. else
    48. cout << ' ';
    49. cout << top->data;
    50. if(top -> l)
    51. q.push(top -> l);
    52. if(top -> r)
    53. q.push(top -> r);
    54. }
    55. }
    56. int main()
    57. {
    58. int n;
    59. cin >> n;
    60. for(int i=0; i<n; ++i)
    61. cin >> beh[i];
    62. for(int i=0; i<n; ++i)
    63. cin >> mid[i];
    64. Bin root = NULL;
    65. root = get_tree(0, n-1, 0, n-1);
    66. level_traver(root);
    67. return 0;
    68. }

  • 相关阅读:
    android的camera学习(2)——底层驱动分析
    java中HashMap的实现原理
    GMT安装与使用
    Java 使用 EMQX 实现物联网 MQTT 通信
    秋招测试开发面经总结
    计算机基础知识32
    文本处理三剑客grep、sed、awk
    音频剪辑技巧:音频降噪在线怎么降噪?分享7种录音去除杂音方法
    进程和线程详解
    Git 命令行使用指南
  • 原文地址:https://blog.csdn.net/qq_51825761/article/details/127887452