您的位置:首页 > 其它

【二叉树】POJ 2255

2011-10-26 13:09 274 查看
题意很简单,给出一棵树的前序&中序遍历,输出后续遍历。

首先我们来研究一下第一个sample:

DBACEGF ABCDEFG

前序遍历是先是从根节点->左子树->右子树;而中序遍历则是左子树->根节点->右子树。所以DBACEGF中D是根, ABC D
EFG 中序可以找左子树&右子树,此时把D放在输出数组的最后一个,然后先递归处理右子树再处理左子树。

#include <map>
#include <set>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <time.h>
#include <cstdio>
#include <math.h>
#include <iomanip>
#include <cstdlib>
#include <limits.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

#define LL long long
#define MIN INT_MIN
#define MAX INT_MAX
#define PI acos(-1.0)
#define FRE freopen("input.txt","r",stdin)
#define FF freopen("output.txt","w",stdout)
#define N 30
char pre
;
char in
;
char ans
;
int len;
void gao(int s1, int s2, int t1, int t2){
int i;
if(s1 > s2)return ;
for(i = t1; i <= t2; i++){
if(in[i] == pre[s1]){
break;
}
}
ans[--len] = pre[s1];
if(s1 == s2){
return ;
}
gao(s1 + i - t1 + 1, s2, i + 1, t2);
gao(s1 + 1, s1 + i - t1, t1, i - 1);
}
int main(){
while(scanf("%s%s",pre,in) != EOF){
int i,j;
len = strlen(pre);
memset(ans,'\0',sizeof(ans));
gao(0,len - 1,0,len - 1);
printf("%s\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: