题目链接:求先序排列

这道题讲白了,就是数的构造,然后遍历。

思路大致是这样:

我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的关系,然后分为两段,重复该操作即可。

先序遍历也没有什么难的,先输出根,然后判断是否有左右子树,有的话递归输出,没有就算。

下面上代码:

#include<bits/stdc++.h>
using namespace std;
struct point{ //1
int p; //2
int lc;
int rc;
}poi[26]; //3
void build(int* mid,int* back,int ml,int mr,int bl,int br){
if(mr-ml<1){ //4
return;
}
int root=back[br]; //5
int index;
for(int i=ml;i<=mr;i++){
if(mid[i]==root){
index=i; //6
break;
}
}
if(index-1>=ml){ //7
poi[root].lc=back[index-1-ml+bl];
poi[back[index-1-ml+bl]].p=root;
build(mid,back,ml,index-1,bl,index-1-ml+bl);
}
if(mr>=index+1){
poi[root].rc=back[br-1];
poi[back[br-1]].p=root;
build(mid,back,index+1,mr,index-ml+bl,br-1);
} }
void treeprint(int root){
printf("%c",root+'A'); //8
if(poi[root].lc!=-1){ //9
treeprint(poi[root].lc);
}
if(poi[root].rc!=-1){
treeprint(poi[root].rc);
}
}
int main(){
char mid[10],back[10];
int midn[10],backn[10];
char c;
scanf("%s",mid);
scanf("%c",&c);
scanf("%s",back);
for(int i=0;i<26;i++){ //10
poi[i].p=-1;
poi[i].lc=-1;
poi[i].rc=-1;
}
int i;
for(i=0;mid[i]!='\0';i++){ //11
midn[i]=mid[i]-'A';
}
for(i=0;back[i]!='\0';i++){
backn[i]=back[i]-'A';
}
int root=backn[i-1];
build(midn,backn,0,i-1,0,i-1);
treeprint(root);
return 0;
}

讲11点(怪多的哈):

1处:写一个节点结构体。

2处:这个记录父亲没什么用,放在这里仅仅是为了保持节点数据的完整性。

3处:题目没有明确说只用前八个字母,所以还是小心点好,防止被坑。

4处:如果区间长度小于等于1,也就不可能再有子树,那么返回。

5处:找到根。

6处:找到根在中序遍历中的坐标。

7处:判断中序遍历中,根的左右边是否有字符,如果有说明有子树。

8处:打印当前根。

9处:判断是否有子节点。

10处:结构体数据初始化,用于判断左右子树是否为空。

11处:转化成数字便于处理,输出时别忘了转化回去。

求先序排列(NOIP2001&NOIP水题测试(2017082301))的更多相关文章

  1. NOIP水题测试(2017082301)

    你们从题目也能看出来今天的题是很水的. 前几期答案还没出,效率有点低,谅解,谅解. 今天的答案应该会出的很快. 下面给题目: 时间限制:3小时 题目一:旅行家的预算 题目二:进制转换 题目三:乘积最大 ...

  2. 失踪的7(P1590&NOIP水题测试(2017082301))

    题目链接:失踪的7 水题,不解释. #include<bits/stdc++.h> using namespace std; int main(){ int t; scanf(" ...

  3. 子数整数(P1151&NOIP水题测试(2017082301))

    题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...

  4. 进制转换(NOIP2000&NOIP水题测试(2017082301))

    题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...

  5. 乘积最大(NOIP2000&NOIP水题测试(2017082301))

    题目链接:乘积最大 这道题显然是道区间dp. 难度不是很大. 思路也很清晰. 我们设计一个三维状态. ans[l][r][k] 这里表示在闭区间[l,r]上操作k次的最大值. 操作就是加乘号. 转移也 ...

  6. NOIP水题测试(2017082401)

    哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...

  7. NOIP水题测试(2017082501)

    日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...

  8. 旅行家的预算(NOIP1999&水题测试2017082301)

    题目链接:旅行家的预算 这题还可以,不算太水. 这题贪心即可. 我们采取如下动作: 如果在装满油的情况下能到达的范围内,没有加油站,则无解. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价 ...

  9. NC16692 [NOIP2001]求先序排列

    NC16692 [NOIP2001]求先序排列 题目 题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度 ≤ 8). 输入描述 2行,均为大写字母组成的 ...

随机推荐

  1. 比较perl+python

    作者:iTech出处:http://itech.cnblogs.com/ http://hyperpolyglot.org/scripting   perl (1987) python (1991) ...

  2. suse glibcxx版本过高问题

    实际开发中发现,suse11虽然glibc版本很低,只有2.11.3,但是glibcxx版本很高,达到了3.4.19.这里我需要降低glibcxx版本.所谓glibcxx版本,即libstdc++.s ...

  3. Shc 应用

    1.说明 shc是一个加密shell脚本的工具, 它的作用是把shell脚本转换为一个可执行的二进制文件 2.安装 下载 # mget  http://www.datsi.fi.upm.es/~fro ...

  4. Android四大组件总结

    1:Actiivty 用户可以看见并可以操作的界面 Activity开启方式:startActivityForResult :startActivity Activity生命周期: onCreate  ...

  5. stm32 启动文件 C和汇编交叉嵌入

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  6. [剑指Offer]45-把数组排成最小的数

    题目链接 https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&t ...

  7. Linux 线程】线程同步《四》

    1.信号量 (1)概念 信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区. 不多做解释,要使用信号量同步,需要包含头文件semaphore.h. ...

  8. apache jmeter 压力测试

    前面讲了linux下的压力测试,今天来个windows下的,用jmeter为例 我用了两个apache-jmeter-3.1和apache-jmeter-4.0分别进行了测试, 前者高并发电脑卡死时间 ...

  9. c#引用命名空间的作用

    System 包含用于定义常用值和引用数据类型.事件和事件处理程序.接口.属性和处理异常的基础类和基类.其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序 ...

  10. Django 前端Wbe框架

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...