标签:pre loc 遍历 知二求 len substr 二叉树 UVA536
注:知二求一必须有中序遍历序列
题目描述:
输入一棵二叉树的先序遍历和中序遍历序列,输出它的后序遍历序列。
解题思路:
1、考察根据两个遍历序列的二叉树的重建,三步走即可:前序找根、中序分左右、递归还原;
2、根据题意,对树只有输出结点操作,完全没有必要生成结点重新构建树,只需要在递归的过程中按照后序遍历的顺序左右根,把输出根放在递归左右子树之后即可。
代码实现:
#include <iostream>
using namespace std;
void Output(string s_pre, string s_in, int len)
{
if (len == 0)
{
return;
}
char temp = s_pre[0];
int loc = s_in.find(temp);
Output(s_pre.substr(1, loc), s_in.substr(0, loc), loc);
Output(s_pre.substr(loc + 1, len - loc - 1), s_in.substr(loc + 1, len - loc - 1), len - loc - 1);
cout << temp;
}
int main()
{
string s_pre, s_in;
while (cin >> s_pre >> s_in)
{
int len = s_pre.size();
Output(s_pre, s_in, len);
cout << endl;
}
return 0;
}
标签:pre,loc,遍历,知二求,len,substr,二叉树,UVA536 来源: https://blog.csdn.net/qq_48988844/article/details/120200370
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。