1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】
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 分)【一般 / 建树 树的遍历】相关推荐
- 1086 Tree Traversals Again (25分)
1 题目 1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-r ...
- 【PAT (Advanced Level) Practice】1086 Tree Traversals Again (25 分)
众所周知只有前序遍历和后序遍历是不可能推出中序遍历的,所以我就不废话了 由树的前序遍历和中序遍历可以推后序遍历 由树的中序遍历和后序遍历可以推前序遍历 #include <cstdio> ...
- 软件学院天梯赛参赛队员第一次训练 L2-1 红豆生南国 (25 分)(完全二叉树,树的遍历,重建二叉树,DFS)
题目: 有诗云: 相思 (王维 唐)红豆生南国, 春来发几枝.愿君多采撷, 此物最相思. 那么,我们来采红豆吧! 假设红豆树是这个样子的: 这种红豆树的特点是: 每个结点都有一个正整数编号,标在结点内 ...
- 03-树3 Tree Traversals Again (25 分)
题目描述: C代码实现及详解(注释部分): #include<stdio.h> #include<stdlib.h> #include<string.h> #def ...
- PAT甲级1086 Tree Traversals Again:[C++题解]二叉树中序序列、栈、求后序遍历
文章目录 题目分析 题目链接 题目分析 分析: 给定栈模拟的二叉树的中序序列. 我们可以发现一些性质: 1 第一个值是根结点. 2 对于所有的push操作,如果上一个是push,该结点就是上一个结点的 ...
- pat03-树3. Tree Traversals Again (25)
03-树3. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...
- 1086 Tree Traversals Again
1. 这题的核心部分是,根据二叉树的先序序列和中序序列求后序序列.等于是在1020 Tree Traversals这一题的基础上,把怎么得到先序序列和中序序列的难度加大了,不是直接给出,而是要曲折一点 ...
- 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字
立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...
- PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)
文章目录 题目分析 题目链接 题目分析 图片来源:acwing 分析 平衡树(AVL树)是平衡二叉搜索树的简称,当然需要满足二叉搜索树的性质,左子树小于根,根小于等于右子树:然后还要满足平衡树的基本特 ...
最新文章
- PL/SQL Developer(解压版)连接64位的Oracle11g
- python 函数变量_Python函数中的变量和函数返回值
- 网页怎么在图片上添加文字_想给图片添加文字,留白,添加小印章?用手机三步搞定...
- Android蓝牙开发前序知识
- npm run dev 出现npm ERR!missing scrip:dev
- c++设计模式之状态模式
- 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解
- GdiPlus[30]: IGPPen: 线帽
- Linux系统编程(二)孤儿进程和僵尸进程
- python 循环写文件_python-文件操作及循环
- 定时器中断程序控制led闪烁
- mybatis 高级映射 - 一对多查询 - collection
- 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
- L1、L2正则化区别和数学原理,以及什么是Elastic Net(弹性网络)正则项
- OpenV2X 开源社区成立,填补 5G 路侧开放基础架构(RSOI)空白
- LayUI使用distpicker.js插件实现三级联动
- QTreeView使用系列教程目录
- 软路由Linux7,CentOS 7 NAT软路由
- Linux手动安装JDK并配置多个版本JDK--JDK配置和Jenv的配置使用
- python跨平台是什么意思_跨平台是什么意思?通俗深刻的解释
热门文章
- PyTorch 深度学习: 60 分钟极速入门
- JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
- Linux下WRF Domain Wizard使用教程(PART2: 使用教程及 遇到的种种BUG)
- phoneGap异步加载JS失败
- css3 点击爆炸下落
- 第二十篇:定义一个整形变量
- 手机PIN锁死让输入PUK解决方案
- R语言:na.fail和na.omit
- 区块链BaaS云服务(40) 泰岳联盟链
- 跨链(5)“蚂蚁区块链”之跨链数据连接服务