题目:[NOIP2001]求先序排列

参考题解:[NOIP2001]求先序排列题目题解

首先举例:

中序: FDBEG A CH
后序: FDGEB HC A

设递归函数名为void xian(string s1,string s2)

0. 定义 len1是中序的长度,len2是后序的长度,如果后序的长度小于等于0,return;

(例子中 len1=len2=8 )

1. 后序的最后一个字母先序的第一个字母,定义字符 ch=这个字母,输出这个字符;

(例子中输出A)

2. 在 中序 中 找到 字符ch 的下标,记为pos;

(例子中pos=5)

【用string的 find 函数,关于 find函数 可见这篇博客:C++ string中的find()函数 - 博客园】

3. 以pos为分界线,开始递归 中序pos 的【0,pos) 和 【pos+1,len1);

(例子中的 左边FDBEG 和 右边CH)

对应的是 后序序列的【0,pos)部分和【pos,len2-1);

(例子中的 左边FDGEB 和 右边HC)

这时可以用string的substr函数:substr(C++语言函数)_百度百科

substr的参数是起点和长度,所以递归写成:xian(s1.substr(0,pos) , s2.substr(0,pos));//左

和 xian (s1.substr(pos+1,len1-pos-1),s2.substr(pos,len2-1-pos));//右


如果写法上简略一点的话,可以写成:

xian(s1, s2.substr(0,pos));和xian (s1.substr(pos+1),s2.substr(pos,len2-1-pos));


代码:

#include<bits/stdc++.h>
using namespace std;
char s1[10],s2[10];
void xian(string s1,string s2){int len1=s1.size();int len2=s2.size();if(len2<=0)return;char c=s2[len2-1];cout<<c;int pos=s1.find(c);xian(s1.substr(0,pos),s2.substr(0,pos));xian(s1.substr(pos+1,len1-pos-1),s2.substr(pos,len2-pos-1));
}
int main()
{string s1,s2;cin>>s1>>s2;xian(s1,s2);return 0;}

已知中序、后序,求先序相关推荐

  1. 二叉树:已知先序和中序求后序,已知中序和后序求先序

    树的三种遍历方式的遍历顺序: 先序遍历:根.左子树.右子树(特点:第一个元素为根) 中序遍历:左子树.根.右子树(特点:根的两边分别为左子树和右子树) 后序遍历:左子树.右子树.根(特点:最后一个元素 ...

  2. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

  3. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  4. [算法] 已知前序和后序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...

  5. 已知二叉树的后序序列和中序序列,求先序序列。

    后续遍历=左子树,右子树,根,中序遍历=左子树,根,右子树 已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是? 由后序遍历序列是DBCEFGHA,可以看出整 ...

  6. LeetCode 106. 已知中序后序 求二叉树

    文章目录 1. 题目 2. 解题 2.1 递归 2.2 循环 1. 题目 类似题目LeetCode 105. 已知前序&中序 求二叉树 2. 解题 2.1 递归 递归法,后序最后一个是根节点 ...

  7. 二叉树经典问题——已知中序和前序重建二叉树

    运用前序和中序序列重建二叉树及其相关应用## 重建过程 1,在二叉树的学习中经常会遇到一类问题,就是给出一棵二叉树的前序和中序序列(后序和中序类似)然后求树的深度.树的后序序列.树的各种遍历等等问题, ...

  8. [二叉树]已知后序/中序遍历,求先序遍历

    二叉树后序遍历序列是dabec,中序遍历序列debac,它的前序遍历的序列是什么 1.由后序(LRD)得知C肯定为根结点 2.由中序(LDR) 以c为根节点该树必然只有左子树 3.先从后序入树 dab ...

  9. 二叉树已知前序中序求后序(超简单)(java)

    首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...

最新文章

  1. Numpy入门教程:04. 数学函数
  2. Cell:无症状新冠患者阳性持续105天
  3. 人工智能要多久才能理解动物?
  4. android学习之Service
  5. openssl与cryptoAPI交互AES加密解密
  6. 可逆神经网络(Invertible Neural Networks)详细解析:让神经网络更加轻量化
  7. 推荐.neter常用优秀开源项目系列之二
  8. html清楚css的影响,08、清除浮动的影响.html
  9. 附9 elasticsearch-curator + Linux定时任务
  10. 【完整版-斯坦福-密码学】全13讲(绪论)【笔记】
  11. 根据用户名或者厂商名称生成相关的弱口令
  12. java类可视化doxygen_安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件...
  13. Angular - - ng-focus、ng-blur
  14. Growth—电子书预览版
  15. aplay amixer用法详解
  16. MER 音乐情感识别-论文笔记6
  17. 软件随想录(local.joelonsoftware.com/wiki)-2002年12月11日 程序设计领域的帕麦尔斯顿勋爵 - Lord Palmerston on Programming
  18. [笔记分享] [RTC] Alarm内核驱动分析
  19. 通过Windows7升级正版Windows10
  20. 微信小程序小说阅读器/在线故事阅读丨可以android studio运行

热门文章

  1. 个人日记-阿西莫夫的《银河帝国》系列小说第8本读后感-20200927
  2. python笛卡尔_Python 计算笛卡尔积
  3. 从mpeg ts文件中提取I帧(1):将ts包拼装为section或pes包
  4. MMA8452加速传感器的应用(简)
  5. 新手使用xc3s50an-dk@liuger 开发板
  6. 【SpringBoot】Http请求统一异常(返回数据)处理与单元测试
  7. 数字证书(安全校验)
  8. VSTO开发入门教程(bili网站搜罗VSTO免费视频资源)
  9. 大道至简——RISC-V架构之魂(中)
  10. vue项目中出现重复点击路由报错