【题解】求后序遍历

题目描述

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入输出格式

输入格式:

共两行:
第一行为一个字符串,表示树的先序遍历;
第二行为一个字符串,表示树的中序遍历。
树的结点一律用小写字母表示。

输出格式:

一行,表示树的后序遍历序列。

输入输出样例

输入样例:

abdec
dbeac

输出样例:

debca

这道题就是一道简单的模板题
首先可以设置一个index索引表,存放这棵树的每个字母在前序遍历中排哪个位置
可以这么想:
先在前序遍历中找出根,就是在index表中最小的那一个
然后就可以把这棵树的根找出来,分为两个子树
如图:
7491
然后递归这个做法就可以了!
附代码:

#include<iostream>
#include<string>
using namespace std;
string pre,mid;
int index[127];
void dfs(int low,int high)
{
	if(low>high) return;
	int min=2147483647,root=0;
	for(register int i=low;i<=high;++i)
	{
		if(index[mid[i]]<=min)
		{
			min=index[mid[i]];
			root=i;
		}
	}
	dfs(low,root-1);
	dfs(root+1,high);
	cout<<mid[root];
}
int main()
{
	cin>>pre;
	cin>>mid;
	for(register int i=0;i<pre.size();++i) index[pre[i]]=i;
	dfs(0,pre.size()-1); 
}
原文地址:https://www.cnblogs.com/2021-yanghaoran/p/12010575.html