码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PAT甲级 1020 Tree Traversals


    已经二叉树的中序遍历序列,以及后序遍历序列,求层序遍历序列

    中序遍历序列:[left, root, right],后序遍历序列:[left, right, root]

    postorder: 4 5 2 3 1  inorder: 4 2 5 1 3

     先看后续遍历序列,最后一位就是root节点1,然后inorder可以被1化为左右两侧  

    得到4 2 5 和 3;然后相应的根据元素,postorder可化为4 5 2 和 3。1被删除了的

    将1存到二叉树结构体的value,然后postorder变为2个了,inorder也变为2个了

    postorder1: 4 5 2   inorder1: 4 2 5

    postorder2: 3     inorder2: 3

    然后根据后续遍历最后1位,可以得到根节点root1=2,然后inorder1被2划开,将左支继续划为两支

    postorder3: 4     inorder  4

    postorder4: 5     inorder4: 5

    可以使用递归的方式得到二叉树的整体结构,要注意二叉树赋值要提前malloc内存

    1. #include<iostream>
    2. #include<algorithm>
    3. #include<stdlib.h>
    4. #include<vector>
    5. #include<string>
    6. #include<map>
    7. #include<set>
    8. #include<bits/stdc++.h>
    9. using namespace std;
    10. int x, y, z;
    11. struct nodees{
    12. struct nodees *left;
    13. struct nodees *right;
    14. int values;
    15. };
    16. void gettree(nodees *nd, vector<int> v, vector<int> v0){
    17. if(v.size()==0||v0.size()==0) return;
    18. x = v[v.size()-1];
    19. nd->values = x;
    20. vector<int> left0, right0, tmp, left, right;
    21. tmp = v0;
    22. for(int i=0; i<v0.size(); i++){
    23. if(v0[i]==x){
    24. y = i;
    25. break;
    26. }
    27. }
    28. v.pop_back();
    29. v0.erase(v0.begin() + y, v0.end());
    30. left0 = v0;
    31. set<int> st;
    32. set<int>::iterator it;
    33. for(int i = 0; i < left0.size(); i++) st.insert(left0[i]);
    34. tmp.erase(tmp.begin(), tmp.begin() + y + 1);
    35. right0 = tmp;
    36. for(int i = 0; i < v.size(); i++){
    37. it = st.find(v[i]);
    38. if(it==st.end()){
    39. y = i;
    40. break;
    41. }
    42. }
    43. tmp = v;
    44. v.erase(v.begin() + y, v.end());
    45. left = v;
    46. tmp.erase(tmp.begin(), tmp.begin() + y);
    47. right = tmp;
    48. nd->left = (struct nodees *)malloc(sizeof(struct nodees));
    49. nd->right = (struct nodees *)malloc(sizeof(struct nodees));
    50. nd->left->values = -9;
    51. nd->right->values = -9;
    52. gettree(nd->left, left, left0);
    53. gettree(nd->right, right, right0);
    54. }
    55. int main(){
    56. int n, i, j, a, c;
    57. cin>>n;
    58. vector<int> v, v0;
    59. map<int, int> m, m0;
    60. struct nodees *nd = (struct nodees *)malloc(sizeof(struct nodees));
    61. for(i = 0; i < n; i++){
    62. cin>>a;
    63. v.push_back(a);
    64. m[a] = i;
    65. }
    66. for(i = 0; i < n; i++){
    67. cin>>a;
    68. v0.push_back(a);
    69. m0[a] = i;
    70. }
    71. gettree(nd, v, v0);
    72. vector<long long> add;
    73. add.push_back((long long)nd);
    74. struct nodees *ndd;
    75. vector<int> www;
    76. while(add.size()!=0){
    77. ndd = (struct nodees *)add[0];
    78. add.erase(add.begin());
    79. www.push_back(ndd->values);
    80. if(ndd->left->values > 0) add.push_back((long long)ndd->left);
    81. if(ndd->right->values > 0) add.push_back((long long)ndd->right);
    82. }
    83. for(int i = 0; i < www.size(); i++){
    84. cout<<www[i];
    85. if(i!=(www.size()-1)) cout<<" ";
    86. }
    87. return 0;
    88. }

     GitHub - ZouJiu1/PAT: 浙江大学PAT题目解答内容浙江大学PAT题目解答内容. Contribute to ZouJiu1/PAT development by creating an account on GitHub.https://github.com/ZouJiu1/PAT

    Tree Traversals (Inorder, Preorder and Postorder) - GeeksforGeeks

  • 相关阅读:
    15个必须知道的sql优化技巧(荣耀典藏版)
    pip快速安装torch、opencv、scipy库
    如何删除windows的WSL
    Redis实战案例及问题分析之redis实现短信登陆
    【数据结构】单链表OJ题
    FFplay文档解读-15-重采样器选项,缩放选项,过滤简介,graph2dot,滤波器描述,时间表编辑,具有多个输入的过滤器选项(帧同步)
    在WinForms应用程序中创建一个定时任务以监听鼠标左键点击事件可以通过以下步骤实现
    【Unity程序技巧】公共Update管理器
    大家都说Java有三种创建线程的方式!并发编程中的惊天骗局!
    phpstudy开机自启
  • 原文地址:https://blog.csdn.net/m0_50617544/article/details/125462936
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号