2010 求后序遍历
2010 求后序遍历
时间限制: 1 s
空间限制: 64000 KB
题目等级 : 白银 Silver
题目描述 Description
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。
输入描述 Input Description
共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。
输出描述 Output Description
仅一行,表示树的后序遍历序列。
样例输入 Sample Input
abdehicfg
dbheiafcg
样例输出 Sample Output
dhiebfgca
数据范围及提示 Data Size & Hint
输入长度不大于255。
分类标签 Tags 点此展开
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 string s1,s2; 6 void calc(int l1,int r1,int l2,int r2) 7 { 8 int m=s2.find(s1[l1]); 9 if(m>l2) //当m=l2 时 说明左子树只含有一个元素, 10 calc(l1+1,l1+m-l2,l2,m-1);// 前半部分是先序遍历 后半部分是中序遍历 11 if(m<r2)// 同理,右子树只含有一个元素 12 calc(l1+m-l2+1,r1,m+1,r2); 13 cout<<s1[l1];//巧妙利用后序遍历最后输出节点的性质 14 } 15 int main() 16 { 17 cin>>s1>>s2; 18 calc(0,s1.length()-1,0,s2.length()-1); 19 return 0; 20 } 21 //前序遍历的每个分块的第一个值为根节点,我从中序遍历里找到其相应位置, 22 //之前即为左子树的范围,之后为右子树的范围 23 // if (k > l2) solve(l1+1,l1+k-l2,l2,k-1); 24 //判断条件是当找到了最底层的节点的时候就不做了(此时k=l2) 25 //l1+1:下一个左子树最开头的节点的位置,l1-k+l2:通过中序遍历求出左子树的范围进而找到左子树最后一个节点的位置 26 // if (k < r2) solve(l1+k-l2+1,r1,k+1,r2); 27 //l1+k-l2+1:紧接着右子树第一个节点也就是根节点的位置(l1+k-l2是左子树最后一个节点的位置,加一即为右子树第一个节点) 28 // cout << first[l1]; //因为求后序遍历所以递归调用最后才输出根节点的值
相关推荐
baike 2020-05-09
sunjunior 2020-04-08
ipqtjmqj 2020-02-14
choupiaoyi 2020-02-01
mieleizhi0 2019-12-31
郭岚 2019-11-04
徐建岗网络管理 2019-11-02
Sophiego 2019-05-18
Cypress 2019-07-01
jaminliu0 2019-06-29
YUAN 2019-06-28
Lenskit 2019-06-26
WindChaser 2019-06-21
xingweiyong 2015-04-07
算法魔功 2018-07-24
王少雷的黑马 2017-02-17
Wcplus 2018-05-07
Masimaro 2017-04-13
zhglinux 2018-07-27
龙源潇俊 2018-05-08
python的学习之路 2018-05-25
梦呓bolg 2017-12-12
yhguo00 2017-11-24
tansuo 2015-08-30
wangxiaohua 2015-08-11
明立 2017-06-30
LeonTom 2017-06-02
electricperi 2015-02-15
tansuo 2015-01-12
pythonpycharm 2016-05-24
大数据分析BDA 2014-08-02
tansuo 2014-07-30
云华00 2013-11-10
Pythonandme 2019-03-06
pythoncream 2018-12-24
guyuanxiang 2014-04-29
妖怪哪里跑 2019-02-21
PHP100 2019-03-28