爆刷PAT(甲级)——之【1119 】Pre- and Post-order Traversals (30 分)——先序后序建立中序遍历

1119. Pre- and Post-order Traversals (30)-PAT甲级真题(前序后序转中序) 1119. Pre- and Post-order Traversals (30)Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder trav... 阅读详情

 题意:分别输入一个先序和后序遍历的序列,给出对应的中序遍历,并判断此中序遍历是否唯一。

 

方法与学习过程:本题就是赤裸裸的如何由先序和后序遍历,进行建树or进行中序遍历。学习了三位博客的内容,我就不献丑赘述了~

柳神的代码是用来膜的,看一下柳神的宏观思路:https://blog.youkuaiyun.com/liuchuo/article/details/52505179

这位兄弟的博客主要是由图文的一个描述,可以更好的理解什么情况下,中序遍历是不唯一的?但是代码就比较冗长了...https://blog.youkuaiyun.com/li1615882553/article/details/88061615

这位道友的博客主要是和柳神一样,代码写的很好噢!37行代码,思路清晰而且很通俗易懂,本题代码我是借鉴了他的。https://blog.youkuaiyun.com/rain722/article/details/52596149

 

 思考:学习了【先序后序建树得中序】之后呢,自然而然会将其与【先序中序建树】与【后序中序建树】进行联想。这其中的代码撰写与思考是有一定的异同的,我之前总结了【先序中序建树】与【后序中序建树】的建树模板与思路,传送门在这里。PAT上也有道题目,是【先序+后序】进行建树的,传送门2在这里。

首先【先序中序建树】与【后序中序建树】的思考方式,都是先找出根节点在中序中的位置,然后就可以对左右子树进行递归了!故根节点可以在 “先序/中序” 与 “中序” 建立联系,因此切入点是——根节点。

而本题目的【先序后序建树得中序】中,没有中序呀!而且根的位置很显然,就是先序的第一个呗。但是我们还是要想办法剥离出左右子树进行递归,所以我们从“某个子树的根”来切入,即”当前根节点的孩子“来切入。因为 孩子节点能够在 ”先序“ 和 “后序” 中建立联系。这一点很重要。在下面的代码中,体现这个思想,是在getIn(...)函数的for循环里,找到孩子在后序中的位置。

而我们在建立中序遍历的输出序列时候,秉持的依然是“左根右”的方式,所以先对左子树进行遍历,再写入根于in数组中,再对右子树进行遍历。

不论是之前的【先序中序建树】与【后序中序建树】,还是本次的【先序后序建树得中序】建树,核心都在于,根据已有的序列,如何把序列分辨出哪个是根,哪个是左子树的部分,哪个是右子树的部分,就好了,剩下的交给计算机去递归就行了!

 

Code:借鉴了第三位博主的写法,再加上自己的书写习惯,第一次写PAT能有30来行的代码,哭惹 T T

 

#include<cstdio>
#define inf 39
int n,pre[inf],in[inf],post[inf],pos;
bool getIn(int l1,int r1,int l2,int r2)//此时根是pre[l1],而pre[l1+1]是它的孩子
{
    if(l1>r1)return false;
    if(l1==r1)//为什么要特判?否则下面对孩子的访问会越界段错误的
    {
        in[pos++]=pre[l1];//此处是根不是孩子噢
        return true;
    }
    int i;
    for(i=l2; post[i]!=pre[l1+1]; i++); //找出第一个孩子
    int len=i-l2+1;//由于包含此孩子节点,务必要加1
    int tag=1;
    tag&=getIn(l1+1,l1+len,l2,i);
    in[pos++]=pre[l1];//中序遍历的精华,此处是根不是孩子噢
    tag&=getIn(l1+len+1,r1,i+1,r2-1);
    return tag;
}
int main()
{
    scanf("%d",&n);
    for(int i=0; i<n; i++)scanf("%d",&pre[i]);
    for(int i=0; i<n; i++)scanf("%d",&post[i]);
    pos=0;//pos是in统计的下标
    if(getIn(0,n-1,0,n-1))printf("Yes\n");
    else printf("No\n");
    for(int i=0; i<n; i++)printf("%d%c",in[i],i==n-1?'\n':' ');
    return 0;
}

 

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹 之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当初的学习记录。 阅读详情

相关推荐

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

1119

标准目录一、123二、123三、123四、123五、123六、123 一、123 11111111111111111 二、123 222222222222222222 三、123 333333333333333333333 四、123 44444444444444444444 五、123 555555555555555555555 六、123 6666666666666666666 ...

测试0901-1 488

Xilinx Vitis 2020.1头文件路径配置避坑指南:解决#include找不到文件的常见问题

本文针对Xilinx Vitis 2020.1开发环境中常见的#include头文件找不到问题,提供了系统的避坑指南。文章深入解析了Vitis的头文件搜索机制,对比了通过工程属性GUI、修改编译命令及使用环境变量三种配置方法的优劣与隐藏陷阱,并给出了高级场景的排查流程与工程结构最佳实践,帮助开发者高效解决路径配置难题。

weixin_28831399的博客 570

1119 Pre- and Post-order Traversals

Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences, or preorder and inorder ...

lannister_awalys_pay的博客 205

Silvaco TCAD实战 | SiC MOSFET工艺仿真与关键参数DOE分析

本文详细介绍了使用Silvaco TCAD进行SiC MOSFET工艺仿真与关键参数DOE分析的实战方法。通过外延生长建模、离子注入工艺调试等步骤,结合DOE分析优化器件性能,帮助工程师在设计阶段预判电学特性,提升产品可靠性。文章还分享了网格划分、界面态建模等实用技巧,助力实现从仿真到产品的闭环验证。

weixin_30235225的博客 505

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4248

PAT 1119 Pre- and Post-order Traversals

Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences, or preorder and inorder ...

weixin_30653097的博客 155

随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例

文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变...

Mr.翟的博客 2万+

PAT-A1119 Pre- and Post-order Traversals 题目内容及题解

Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences, or preorder and inorder ...

BourbonWhiskey 的博客 553

word多级列表为什么会变成黑块解决思路

今天在写文档时,发现WORD5级的标题都变黑块了,找了度娘的资料,终于解决了。 第一种 1、光标bai放在黑快的右边,按向左的箭头,然后ctrl+shift+s,点击重新应用。 2、点击“定义新的多级列表”(不知道从哪儿找这个按钮的百度下),直接点确定。 3、这里很重要!!!不要直接保存,而是直接关掉word,会提示保存还是不保存,这个地方再点击保存。 第二种 Word2016 使用宏代码修复方法 1.找到视图-宏,打开 查看宏 2.创建宏 3.贴...

霍力强的专栏 8580

14.建立时间、保持时间以及vivado时序report的参考使用

在设计数字系统时,需要仔细考虑电路元件的选择和布局以及时序设计来满足建立时间和保持时间的要求。建立时间,又称为建立时间窗口或建立期,是指数字信号在触发器的时钟信号前沿到来之前,必须已经稳定存在的时间。在本章节将结婚扫建立时间和保持时间的基本原理,以及如何通过vivado处理建立时间和保持时间。通过使用同步电路,可以更好地控制数据传输的时序并满足建立时间和保持时间的要求。例如,在D触发器中,选择具有适当充电和放电特性的D端口元件可以确保在时钟信号前沿到达前数据已经稳定存在,并在时钟信号前沿到达后保持稳定。

FPGA/MATLAB学习教程/源码/项目合作开发 2985

PAT 1119. Pre- and Post-order Traversals (30) (根据前序后序求中序)

题意:给你一棵树的前序和后序遍历,问你它的中序遍历是否唯一,并且给出任意一种中序遍历。 思路:判断中序遍历是否唯一,我们可以通过每个非叶子节点是否都是有两个孩子,如果只有一个孩子,那他的子树既可以是左子树又可以是又子树,所以就不唯一了。 那怎么判断是否有只有一个孩子的结点。 可以看看这个博客:点击打开链接 已知前序遍历和后序遍历序列,是无法确定一棵二叉树的,原因在于

CillyB的博客 410

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1546

1119 Pre- and Post-order Traversals——PAT甲级

【代码】1119 Pre- and Post-order Traversals——PAT甲级。

flyidj的博客 818

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PAT A1119 Pre- and Post-order Traversals (30分) (先序和后序序列建树)

PAT甲级:A1119 Pre- and Post-order Traversals (30分) Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inor...

只想用最简短的代码刷题 295

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历

刷题

阿正的梦工坊 579

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pat甲级1119 Pre- and Post-order Traversals

pat甲级1119 Pre- and Post-order Traversals note:是否有唯一二叉树,关键在于看非叶节点中是否存在只有一个子树的根节点,若有,则二叉树不唯一,因为无法确定该子树是左子树还是右子树。题目中说二叉树不唯一时,输出其中一种可能的中序序列即可,因此可以将唯一的子树看作左子树,也可以看作右子树,我的做法是看作左子树。 中序遍历方法:首先要确定根节点和子树结点。根节点是先序序列的队首数字也是后序序列的队尾数字。若根节点为非叶子节点,则左子树必然存在,且左子树根节点为先序序列中根节

qq_44992782的博客 206

PAT甲级——1119 Pre- and Post-order Traversals(先序+后序序列,建立二叉树)

1119Pre- and Post-order Traversals(30分) Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder t...

小熊猫的博客 542

PAT甲级1119 Pre- and Post-order Traversals

PAT甲级1119 Pre- and Post-order Traversals Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences, or preorder and inorder traversal seque

weixin_44535077的博客 584

**PAT_甲级_1119 Pre- and Post-order Traversals (30point(s)) (C++)【二叉树的遍历】

1,题目描述 Sample Input 1: 7 1 2 3 4 6 7 5 2 6 7 4 5 3 1 Sample Output 1: Yes 2 1 6 4 7 3 5 Sample Input 2: 4 1 2 3 4 2 4 3 1 Sample Output 2: No 2 1 3 4 题目大意 根据二叉树的先序遍历和后序遍...

&再见萤火虫&的博客 305

PAT甲级1119 Pre- and Post-order Traversals (30分)|C++实现

一、题目描述 原题链接 Input Specification: ​​Output Specification: Sample Input 1: 7 1 2 3 4 6 7 5 2 6 7 4 5 3 1 Sample Output 1: Yes 2 1 6 4 7 3 5 Sample Input 2: 4 1 2 3 4 2 4 3 1 Sample Output 2: No 2 1 3 4 二、解题思路 算是一道比较简单的30分题,给我们一组数据,要求我们放入BST中并且输出最后两层的元素数目之

weixin_42393947的博客 202

【PAT甲级题解记录】1119 Pre- and Post-order Traversals (30 分)

Problem:1119 Pre- and Post-order Traversals (30 分)Tags:树的三种遍历 建树。

retr0的博客 426

PAT 甲级 1119  Pre- and Post-order Traversals

1119 Pre- and Post-order Traversals (30 point(s)) Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and in...

漫浸天空的雨色的备忘录~ 768

PAT 甲级 1119 Pre- and Post-order Traversals (30 分)

PAT 甲级 1119 Pre- and Post-order Traversals (30 分) 题目 Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and ...

努力不脱发的程序媛 407

Pre- and Post-order Traversals(先序+后序序列,建立二叉树)

PAT甲级1119,我先在优快云上面发布的这篇文章:https://blog.youkuaiyun.com/weixin_44385565/article/details/89737224 Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determ...

weixin_30251587的博客 190

PAT甲级-1119 Pre- and Post-order Traversals

由二叉树的先序和后序求中序遍历,并判断树是否唯一 C++

weixin_74092648的博客 706
上一篇: 爆刷PAT(甲级)——之【1139】 First Contact (30 分)——模拟+两个细节
下一篇: 爆刷PAT(甲级)——之链表专题【1032】【1052】【1097】【1133】——一个排序法应对大部分链表题
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值