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:
7 2 3 1 5 7 6 4 1 2 3 4 5 6 7Sample Output:
4 1 6 3 5 7 2思路:
根据后序遍历和中序遍历对树进行还原,然后层序遍历输出结果。
- 后序遍历【左右根】找到根,中序遍历【左根右】划分出左右子树,然后可以递归求解,递归的参数就是后序遍历和中序遍历的左右边界,终止条件是左索引大于右索引。
- 通过中序遍历,确定的是左子树节点的数量,利用数量就可以在后序遍历中划分出左右子树。【不是节点具体是什么,也不是节点的顺序,是数量】,区间是左闭右闭的,注意加一减一的问题。
- 利用队列,从根节点对树进行遍历,每一个循环要做的事【取出队列中的头节点,然后头节点的子树入队】。
#include<cstdio> #include<iostream> #include<queue> using namespace std; const int maxn = 40; int post[maxn], in[maxn], level[maxn]; struct treeNode { int data; treeNode* lchild; treeNode* rchild; }; treeNode* solve(int postL, int postR, int inL, int inR) { if (postL > postR) return NULL; treeNode* root = new treeNode; root->data = post[postR]; int k; for (k = inL; k <= inR; k++) { if (in[k] == root->data) break; } int leftNumber = k - inL; //左子树,post的区间是[postL, postL + leftNumber - 1], in的区间是[inL, k - 1] root->lchild = solve(postL, postL + leftNumber - 1, inL, k - 1); //右子树,post的区间是[postL + leftNumer, postR - 1], in的区间是[k + 1, inR] root->rchild = solve(postL + leftNumber, postR - 1, k + 1, inR); return root; } int main() { int N; scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d", &post[i]); for (int i = 0; i < N; i++) scanf("%d", &in[i]); treeNode* root = solve(0, N - 1, 0, N - 1); queue<treeNode*> Q; Q.push(root); while (!Q.empty()) { treeNode* top = Q.front(); Q.pop(); if(top->data == root->data) printf("%d", top->data); else printf(" %d", top->data); if (top->lchild != NULL) Q.push(top->lchild); if (top->rchild!= NULL) Q.push(top->rchild); } return 0; }
相关推荐
海光(hygon)CPU ESXI vSphere 紫屏问题修复记录
海光服务器ESXI 紫屏问题修复
PAT甲级 1020 Tree Traversals
PAT甲级 1020 Tree Traversals 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 tr...
【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法
【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法:①检查PyCharm导入的环境是否错误②添加Torch包
Day45: [PAT甲级] 1020 Tree Traversals (25分)
Day45: [PAT甲级] 1020 Tree Traversals (25分) 题源: 来自PAT甲级题库: https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072 代码: dirty code凑合看吧 思路就是通过前序遍历和中序遍历直接把树构造好,然后层序遍历。 #include<io...
“华为”云桌面系统声音比较小,如何调大?
调整操作系统声音 开启云桌面,登录账户之后,进入操作系统,鼠标左键点击右下角的声音图标,把声音调到最大(如下图); 可以考虑使用浏览器在线听音乐,确定声音的音量! 如果只是耳麦声音小,可以鼠标右键点击声音图标,选择录音设备(R),如下图: 点击“录音设备(R)”后进入,鼠标右键点击“麦克风”选择属性,将侦听级别调至最大,确定! 调整华为云终端声音(软设置) 将鼠标移至桌面的顶端中间位置,打开如下图的样式图标,鼠标左键点击“主页”; 点击“主页”之后,将回到云桌面的终端操作界面,
GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)
本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。
PAT 甲级 1020(Tree Traversals )
PAT 甲级 1020题目要求翻译代码思路 题目要求 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
从零到一:Qt与PCL的跨平台开发环境搭建全攻略
本文详细介绍了从零开始搭建Qt与PCL跨平台开发环境的完整流程,涵盖Windows、Linux和macOS三大平台。重点解析了Qt5与Qt6版本选择、PCL库安装配置、VTK集成等关键技术要点,并提供跨平台CMake项目模板和常见问题解决方案,助力开发者快速构建三维点云处理应用。
PAT 1020 Tree Traversals
1020Tree Traversals(25分) 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 ...
uniapp - 实现安卓App打包上架应用商店详细教程,详解Hbuilder打包编译apk发布上传到应用市场全流程,提供uniApp云打包、离线打包app、原生本地打包,附带APP备案和安卓证书申请
uni-app,安卓,APP,应用商店,打包编译apk,上架到应用市场,如何打包app并发布到主流应用市场,发布为AndroidApp流程,应用备案,如何申请安卓证书,hbuilder发布安卓apk后怎么上传到各家软件商店,创建app证书,uniapp发行原生APP本地打包安卓APK,详细最全的步骤教程,项目打包成apk,云打包,安心打包,安卓app离线打包,一直审核不通过,被拒绝,不符合规范,上架发布失败,申请安卓证书和获取证书信息,uni-app打包发布安卓Android软件到各大应用商店,腾讯应用
RK3588开发笔记-spi扩展canfd芯片MCP2518FD调试笔记
在嵌入式系统开发中,CANFD(控制器局域网灵活数据速率)是一种广泛应用于汽车和工业自动化领域的通信协议。为了满足项目需求,我们在RK3588平台上通过SPI接口扩展了CANFD芯片MCP2518FD,之所以用spi进行canfd扩展,是为了解决原生RK3588原生can不够稳定的问题(发送扩展帧有几率编程标准帧,RK3568/3588均存在该问题)。通过本次调试工作,我们成功地在RK3588平台上扩展了CANFD芯片MCP2518FD,并实现了与CAN总线的稳定通信。
Tree Traversals PAT甲级 1020
PAT甲级 1020 Tree Traversals 输入: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 输出: 4 1 6 3 5 7 2 思路整理: 题目要求输入后序遍历序列,和中序遍历序列,首先要弄清这两个序列各自的作用在哪里?后序遍历序列,下面用post[i]进行表示,假设输入n个数。 首先,以整体进行分割,逐步地构造原来的二叉树,post[i]是二叉树的根节点(roo...
ArcGIS实验教程——实验二十五:大型商场选址经典案例
本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。
PAT 甲级 1020 Tree Traversals
1020 Tree Traversals (25 point(s)) 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...
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
[PAT-A 1020]Tree Traversals
考察二叉树的遍历 题目大意: 1.给出一颗二叉树的后序遍历序列和中序遍历序列,求这颗二叉树的层序遍历序列 思路: 记后序序列区间[postL,postR],中序序列区间[inL,inR]。 后根序列中的最后一个元素是整个二叉树的根节点,在中序序列中寻找in[k]==post[postR] 则左子树中序序列区间[inL,k-1],左子树个数numLeft=k-inL,则左子树后序序列区间[post...
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
PAT 1020 Tree Traversals python
根据后序和中序序列构造二叉树
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
PAT-ADVANCED1020——Tree Traversals
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED 原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072 题目描述: 题目翻译: 1020 树的遍历 假设二叉树节点上的所有值都是不同的正整数。给你一棵二叉树...
PAT 1020. Tree Traversals
题目:http://pat.zju.edu.cn/contests/pat-a-practise/1020 题解: 题意就是给一个二叉树的后序和中序,然后确定这棵二叉树,然后层序输出这棵树。 主要思路就是通过后序去确定根root,因为后序中根root肯定是在最后一个的,然后通过找到的根root去把中序的划分成两部分,左边的是根root的左子树,右边的是根root的右子树,再递归左子树和右子树
pat 甲级 1020 Tree Traversals
通过后序遍历找到根的值,然后再到中序序列里找到根的位置再将该树分为左子树与右子树。不断递归即可通过中序和后序重塑一棵树。这道题的思路是先构建二叉树,然后层序遍历二叉树。将问题拆解:1.如何构建二叉树。2.如何测层序遍历二叉树。(2)中序遍历根的左右分左子树和右子树。(1)后序遍历的最后是该树或子树的根。2.bfs层序遍历树。
PAT甲级刷题--1020 Tree Traversals
本题的要求是根据给出的后续遍历和中序遍历打印出数节点的层次遍历。1.设计数据结构存储 后序遍历和中序遍历的输入。为了解决该问题,我们把步骤问题进行划分。2.设计递归函数根据两种遍历创造二叉树。3.使用队列对创建的二叉树进行层次遍历。
[Java] PAT甲级 1020 Tree Traversals
想了挺长时间的思路,跟大家分享一下,顺便记录一下自己的学习情况。题意是已知后序和中序要求层序,首先在后序中找到最后一个结点肯定就是根结点,之后以该结点为标准将中序分为左右两部分,这两部分再根据上面的做法即可得到答案。代码如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR...
PAT甲级 - 1020 Tree Traversals (25 分)
题目链接:PAT甲级 - 1020 Tree Traversals (25 分) 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...
PAT甲级1020 Tree Traversals
本题为简单的树形数据结构问题,根据后续遍历和中序遍历,求出层次遍历。
【PAT甲级 - C++题解】1020 Tree Traversals
📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
3563



被折叠的 条评论
为什么被折叠?



