文章目录

  • 题目分析
  • 题目链接

题目分析


做过前面几道题,发现这道题就是一道模板题,递归建树即可。
还是使用笔者熟悉的hash表来找根,进行优化。 请移步至笔者的另一篇文章:PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

ac代码
写复杂了,下文有简单版。

#include<bits/stdc++.h>
using namespace std;const int N = 5e4 +10;unordered_map<int,int> l,r,pos;
int n ,pre[N],in[N];
vector<int> post;//前序遍历和中序遍历建树
int build(int il ,int ir ,int pl ,int pr){int root = pre[pl];int k =pos[root];if(il< k) l[root] =build(il ,k-1, pl+1, pl+1+k-1-il);if(k< ir) r[root] = build(k+1,ir, pl+k-il+1, pr);return root;
}//后序遍历
void dfs(int u){if(u==0) return;dfs(l[u]);dfs(r[u]);post.push_back(u);
}int main(){cin>> n;for(int i =0; i< n;i ++ ) cin>> pre[i];for(int i=0; i< n ;i++){cin>>in[i];pos[in[i]] = i;}int root = build(0 ,n-1, 0 ,n-1);dfs(root);cout<<post[0];
}

ac代码:简洁版

简洁版代码:毕竟仅仅需要输出后序遍历的第一个结点。
直接在建树的过程中赋值第一个后序遍历的点即可,不用再写dfs后序遍历。

#include<bits/stdc++.h>
using namespace std;const int N = 5e4 +10;unordered_map<int,int> pos;
int n ,pre[N],in[N];
int post; //后序遍历第一个结点void build(int il ,int ir ,int pl ,int pr){int root = pre[pl];int k =pos[root];if(il< k) build(il ,k-1, pl+1, pl+1+k-1-il);if(k< ir) build(k+1,ir, pl+k-il+1, pr);if(post==0) post =root;
}int main(){cin>> n;for(int i =0; i< n;i ++ ) cin>> pre[i];for(int i=0; i< n ;i++){cin>>in[i];pos[in[i]] = i;}build(0 ,n-1, 0 ,n-1);cout<<post;
}

题目链接

PAT甲级1138 Postorder Traversal

PAT甲级1138 Postorder Traversal:[C++题解]前序遍历和中序遍历建树相关推荐

  1. pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...

    [题目描述] 根据前序遍历和中序遍历树构造二叉树. 在线评测地址: 九章算法 - 帮助更多中国人找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧​www.jiuzhang.com [样例 ...

  2. PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列

    PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列 题目 输入格式 输出格式 输入样例 输出样例 代码 题目 已知二叉树层序+中序序列,求后序遍历序列. 输入格式 第一行给出该二叉树的节 ...

  3. 二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!

    文章目录 二叉树的四种遍历方式 前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Leve ...

  4. 二叉树的三种遍历方式:前序遍历、中序遍历和后序遍历

    二叉树的三种遍历方式:前序遍历.中序遍历和后序遍历 参考资料: 二叉树.前序遍历.中序遍历.后序遍历 - 蓝海人 - 博客园 (cnblogs.com) 二叉树 - LeetBook - 力扣(Lee ...

  5. 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法

    二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...

  6. Algorithms_二叉树的前序遍历、中序遍历、后续遍历(深度优先)

    文章目录 前序.中序.后序的含义 实例 Code (递归) 前序遍历 中序遍历 后序遍历 测试 Code (非递归) 前序.中序.后序的含义 前序遍历: 先输出父节点,再遍历左子树,最后遍历右子树 中 ...

  7. 二叉树:通过前序遍历与中序遍历序列输出二叉树的后序遍历序列

    题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历: ...

  8. LintCode-73.前序遍历和中序遍历树构造二叉树

    前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 ...

  9. 二叉树的前序遍历、中序遍历、后序遍历

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 为什么需要树这种数据结构 树的常用术语 二叉树的概念 二叉树遍历的说明 实现二叉树 实现二叉树的遍历 二叉树查找结点 二叉树 ...

最新文章

  1. python基础教程视频(全13集)-Python基础视频教程(600集)【传智播客精品教程】...
  2. MySQL Group Replication调研剖析
  3. java map 最大值_MAP集合选出最大值
  4. vue打包后放在 nginx部署时候的配置文件
  5. Last_Error: Slave SQL thread retried transaction 10 time(s) in vain, giving up导致主从不同步的解决方法
  6. js代码优化(不定时更新)
  7. 安装svn + vs code配置svn
  8. linux十大实用工具,10大好用的Linux实用工具推荐
  9. 一个人能懒到什么地步?
  10. Python关键词百度指数采集,抓包Cookie及json数据处理
  11. Oracle使用函数达到drop table if exists
  12. 电子书籍检索下载很好的网站推荐
  13. 物联网的关键 - 传感器
  14. 【Oracle】userenv()函数介绍分析
  15. APS系统哪家好(下)
  16. 【微信小程序】断点调试一
  17. HTML/樱花爱心网页/
  18. 彻底关闭华为系统更新教程,也可以激活系统更新,最全教程,亲测
  19. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析
  20. 系统的学习网络编程,这篇就够了!(来收藏夹里吃灰)

热门文章

  1. 2016/09/12
  2. 第四章第四个例题(LRJ)
  3. 2招按摩轻松解除黑眼圈 - 生活至上,美容至尚!
  4. 二分类排斥子和鞍点的准确率的表达式pa
  5. flink 三种时间机制_Flink的时间与watermarks详解
  6. python中axis是什么意思_Python axis的含义
  7. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务
  8. 如何同步FTP服务器文件,ftp服务器文件同步
  9. 【Paper】2018_Group Consensus for Discrete-Time Heterogeneous Multiagent Systems with Input and Commun
  10. 【数理知识】《积分变换与场论》王振老师-第2章-拉普拉斯变换