https://pintia.cn/problem-sets/994805342720868352/problems/994805380754817024
首先要知道的是:

  • 入栈顺序就是树的前序遍历的顺序
  • 出栈顺序就是树的中序遍历的顺序

故问题,就转换成了根据前序遍历,中序遍历的顺序建树的过程。
最后遍历树输出后序遍历的结果即可。

#include<bits/stdc++.h>
using namespace std;
vector<int>a,b,ans;
stack<int>st;
int n;
unordered_map<int,int>L,R,S;
int build(int l1,int r1,int l2,int r2)
{auto root=a[l1];int k=S[root];//找到中序遍历所对应的位置。if(k>l2) L[root]=build(l1+1,l1+k-l2,l2,k-1);if(k<r2) R[root]=build(l1+k-l2+1,r1,k+1,r2);return root;
}
void dfs(int root)
{if(L.count(root)) dfs(L[root]);//有左儿子if(R.count(root)) dfs(R[root]);//有右儿子ans.push_back(root);
}
int main(void)
{cin>>n;for(int i=0;i<n*2;i++){string op; cin>>op;if(op=="Push"){int x; cin>>x;a.push_back(x);st.push(x);}else{int u=st.top(); st.pop();b.push_back(u);}}for(int i=0;i<b.size();i++) S[b[i]]=i;build(0,n-1,0,n-1);//建树dfs(a[0]);//遍历树for(int i=0;i<ans.size();i++) {if(i) cout<<" ";cout<<ans[i];}return 0;
}

1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】相关推荐

  1. 1086 Tree Traversals Again (25分)

    1 题目 1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-r ...

  2. 【PAT (Advanced Level) Practice】1086 Tree Traversals Again (25 分)

    众所周知只有前序遍历和后序遍历是不可能推出中序遍历的,所以我就不废话了 由树的前序遍历和中序遍历可以推后序遍历 由树的中序遍历和后序遍历可以推前序遍历 #include <cstdio> ...

  3. 软件学院天梯赛参赛队员第一次训练 L2-1 红豆生南国 (25 分)(完全二叉树,树的遍历,重建二叉树,DFS)

    题目: 有诗云: 相思 (王维 唐)红豆生南国, 春来发几枝.愿君多采撷, 此物最相思. 那么,我们来采红豆吧! 假设红豆树是这个样子的: 这种红豆树的特点是: 每个结点都有一个正整数编号,标在结点内 ...

  4. 03-树3 Tree Traversals Again (25 分)

    题目描述: C代码实现及详解(注释部分): #include<stdio.h> #include<stdlib.h> #include<string.h> #def ...

  5. PAT甲级1086 Tree Traversals Again:[C++题解]二叉树中序序列、栈、求后序遍历

    文章目录 题目分析 题目链接 题目分析 分析: 给定栈模拟的二叉树的中序序列. 我们可以发现一些性质: 1 第一个值是根结点. 2 对于所有的push操作,如果上一个是push,该结点就是上一个结点的 ...

  6. pat03-树3. Tree Traversals Again (25)

    03-树3. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. 1086 Tree Traversals Again

    1. 这题的核心部分是,根据二叉树的先序序列和中序序列求后序序列.等于是在1020 Tree Traversals这一题的基础上,把怎么得到先序序列和中序序列的难度加大了,不是直接给出,而是要曲折一点 ...

  8. 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字

    立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...

  9. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)

    文章目录 题目分析 题目链接 题目分析 图片来源:acwing 分析 平衡树(AVL树)是平衡二叉搜索树的简称,当然需要满足二叉搜索树的性质,左子树小于根,根小于等于右子树:然后还要满足平衡树的基本特 ...

最新文章

  1. PL/SQL Developer(解压版)连接64位的Oracle11g
  2. python 函数变量_Python函数中的变量和函数返回值
  3. 网页怎么在图片上添加文字_想给图片添加文字,留白,添加小印章?用手机三步搞定...
  4. Android蓝牙开发前序知识
  5. npm run dev 出现npm ERR!missing scrip:dev
  6. c++设计模式之状态模式
  7. 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解
  8. GdiPlus[30]: IGPPen: 线帽
  9. Linux系统编程(二)孤儿进程和僵尸进程
  10. python 循环写文件_python-文件操作及循环
  11. 定时器中断程序控制led闪烁
  12. mybatis 高级映射 - 一对多查询 - collection
  13. 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
  14. L1、L2正则化区别和数学原理,以及什么是Elastic Net(弹性网络)正则项
  15. OpenV2X 开源社区成立,填补 5G 路侧开放基础架构(RSOI)空白
  16. LayUI使用distpicker.js插件实现三级联动
  17. QTreeView使用系列教程目录
  18. 软路由Linux7,CentOS 7 NAT软路由
  19. Linux手动安装JDK并配置多个版本JDK--JDK配置和Jenv的配置使用
  20. python跨平台是什么意思_跨平台是什么意思?通俗深刻的解释

热门文章

  1. PyTorch 深度学习: 60 分钟极速入门
  2. JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
  3. Linux下WRF Domain Wizard使用教程(PART2: 使用教程及 遇到的种种BUG)
  4. phoneGap异步加载JS失败
  5. css3 点击爆炸下落
  6. 第二十篇:定义一个整形变量
  7. 手机PIN锁死让输入PUK解决方案
  8. R语言:na.fail和na.omit
  9. 区块链BaaS云服务(40) 泰岳联盟链
  10. 跨链(5)“蚂蚁区块链”之跨链数据连接服务