博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2010 求后序遍历
阅读量:4686 次
发布时间:2019-06-09

本文共 1204 字,大约阅读时间需要 4 分钟。

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
2 #include
3 #include
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
>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]; //因为求后序遍历所以递归调用最后才输出根节点的值

 

转载于:https://www.cnblogs.com/zwfymqz/p/6648113.html

你可能感兴趣的文章
RSA System.Security.Cryptography.CryptographicException
查看>>
s的封装和信息隐蔽
查看>>
excelhttp://www.cnblogs.com/caoyuanzhanlang/p/3591904.html
查看>>
ArrayList和LinkedList和Vector源码分析
查看>>
webservice整合spring cxf
查看>>
再次编译这个应用程序应该不会有问题
查看>>
Ubuntu-tomcat7目录
查看>>
189. Rotate Array
查看>>
使用ASP.Net WebAPI构建REST服务(六)——Self-Host
查看>>
asp.net 的三种开发模式
查看>>
Android 交叉编译 IPerf3
查看>>
Android原生Gallery关于图像Orientation的问题
查看>>
Android开发之ViewPager
查看>>
【NOIP2017】列队【可持久化线段树】
查看>>
python学习——通过while循环语句实现九九乘法表的四种表达方式
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
MvvmCross[翻译] 使用Xamarin与MvvmCross完成一个跨平台App
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
027-chown命令
查看>>
Python 线程、进程和协程
查看>>