已知中序、后序,求先序
题目:[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;}
已知中序、后序,求先序相关推荐
- 二叉树:已知先序和中序求后序,已知中序和后序求先序
树的三种遍历方式的遍历顺序: 先序遍历:根.左子树.右子树(特点:第一个元素为根) 中序遍历:左子树.根.右子树(特点:根的两边分别为左子树和右子树) 后序遍历:左子树.右子树.根(特点:最后一个元素 ...
- 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)
二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序) 之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...
- 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)
1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...
- [算法] 已知前序和后序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...
- 已知二叉树的后序序列和中序序列,求先序序列。
后续遍历=左子树,右子树,根,中序遍历=左子树,根,右子树 已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是? 由后序遍历序列是DBCEFGHA,可以看出整 ...
- LeetCode 106. 已知中序后序 求二叉树
文章目录 1. 题目 2. 解题 2.1 递归 2.2 循环 1. 题目 类似题目LeetCode 105. 已知前序&中序 求二叉树 2. 解题 2.1 递归 递归法,后序最后一个是根节点 ...
- 二叉树经典问题——已知中序和前序重建二叉树
运用前序和中序序列重建二叉树及其相关应用## 重建过程 1,在二叉树的学习中经常会遇到一类问题,就是给出一棵二叉树的前序和中序序列(后序和中序类似)然后求树的深度.树的后序序列.树的各种遍历等等问题, ...
- [二叉树]已知后序/中序遍历,求先序遍历
二叉树后序遍历序列是dabec,中序遍历序列debac,它的前序遍历的序列是什么 1.由后序(LRD)得知C肯定为根结点 2.由中序(LDR) 以c为根节点该树必然只有左子树 3.先从后序入树 dab ...
- 二叉树已知前序中序求后序(超简单)(java)
首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...
最新文章
- Numpy入门教程:04. 数学函数
- Cell:无症状新冠患者阳性持续105天
- 人工智能要多久才能理解动物?
- android学习之Service
- openssl与cryptoAPI交互AES加密解密
- 可逆神经网络(Invertible Neural Networks)详细解析:让神经网络更加轻量化
- 推荐.neter常用优秀开源项目系列之二
- html清楚css的影响,08、清除浮动的影响.html
- 附9 elasticsearch-curator + Linux定时任务
- 【完整版-斯坦福-密码学】全13讲(绪论)【笔记】
- 根据用户名或者厂商名称生成相关的弱口令
- java类可视化doxygen_安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件...
- Angular - - ng-focus、ng-blur
- Growth—电子书预览版
- aplay amixer用法详解
- MER 音乐情感识别-论文笔记6
- 软件随想录(local.joelonsoftware.com/wiki)-2002年12月11日 程序设计领域的帕麦尔斯顿勋爵 - Lord Palmerston on Programming
- [笔记分享] [RTC] Alarm内核驱动分析
- 通过Windows7升级正版Windows10
- 微信小程序小说阅读器/在线故事阅读丨可以android studio运行