题意:给定一颗树的先根遍历和中根遍历,然后求后根遍历。
思路:先根遍历的第一个为root,然后找到root在中根的位置,进而递归左右儿子求解。
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
char s1[30],s2[30];
void sol(int p1,int p2,int q1,int q2)
{
if (p1>p2) return;
int i=0;
for (i=q1;s2[i]!=s1[p1];i++);
sol(p1+1,p1-q1+i,q1,i-1);
sol( p1+i-q1+1,p2,i+1,q2);
printf("%c",s2[i]);
}
int main()
{
while (cin>>s1>>s2)
{
int len=strlen(s1)-1;
sol(0,len,0,len);
puts("");
}
}

本文介绍了一种算法,该算法可以根据给定的先根遍历和中根遍历序列来求解一棵树的后根遍历序列。通过递归地确定每个节点的位置,最终输出完整的后根遍历序列。
627

被折叠的 条评论
为什么被折叠?



