您的位置:首页 > 其它

HIHO #1049 : 后序遍历 (dfs)

2016-08-08 10:05 253 查看
题目链接

前序:根+左儿子+右儿子

中序:左儿子+根+右儿子

当前是这样的状态,左右儿子也是这样的状态,dfs计算好儿子所属的区间即可

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<cstdlib>
#include<vector>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define LL long long
#define pb push_back
#define gcd __gcd

#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)

const int maxn = 3e6+10;
const int inf  = 1 << 28;

char a[maxn],b[maxn];

void dfs(int al,int ar,int bl,int br){
if(al>ar)return ;
int tot = 0;
while(b[tot + bl]!=a[al])tot++;
dfs(al+1,al+tot,bl,bl+tot-1);
dfs(al+tot+1,ar,bl+tot+1,br);
putchar(a[al]);
}
/*
ABCDFGH
BCAFDHG
*/

int main(){
scanf("%s%s",a,b);
int n = strlen(a);
dfs(0,n-1,0,n-1);
puts("");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: