前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
求出后序遍历?
首先,得知道先序遍历是先访问根节点,后访问左孩子节点,然后右孩子节点,中序遍历先访问左孩子节点,然后访问根节点,最后访问右孩子节点。
所以由前序遍历第一个节点G肯定是根节点,然后在中序遍历中找到G ,G左边的节点ADEF,肯定在G的左子树,G右边的节点HMZ肯定在G的右子树,然后递归地处理ADEF 和 HMZ子树。 如此交替进行。
代码如下:
#include<iostream>
#include<string>
using namespace std;
char ans[30];
int t;
void solve(string s1,string s2){
if(s1.length()==0){
return ;
}
if(s1.length()==1){
ans[t++]=s1[0];
return;
}
int tt = s2.find(s1[0]);
solve(s1.substr(1,tt),s2.substr(0,tt));
solve(s1.substr(tt+1,s1.length()-tt-1),
s2.substr(tt+1,s2.length()-tt-1));
ans[t++]=s1[0];
}
int main(){
string stra,strb;
while(cin>>stra>>strb){
int len = stra.length();
t=0;
solve(stra,strb);
ans[len]='\0';
cout<<ans<<endl;
}
return 0;
}