题意:给出某个树的bfs和dfs两种不同的遍历//按照编号从小到大的顺序访问,求出这个树每个节点的子节点,我的思路是一bfs为基准通过dfs为辅助,确定每一个节点的父节点
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
vector<int> ans[1005];
vector<int> change;
int bfs[1005];
int dfs[1005];
int visit[1005];
int cnt=1;
while(scanf("%d",&n)==1){
cnt=1;
memset(visit,0,sizeof(visit));
for(int i=0;i<n;i++){
scanf("%d",&bfs[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&dfs[i]);
}
visit[bfs[0]]=1;
while(!visit[bfs[n-1]]){//只要bfs最后一个没被访问就继续
for(int i=1;i<n;i++){//不断从dfs的头开始查找
if(bfs[cnt]==dfs[i]){
for(int j=i-1;j>=0;j--){
if(visit[dfs[j]]){
ans[dfs[j]].push_back(bfs[cnt]);
change.push_back(bfs[cnt]);
cnt++;
break;
}
}
}
}
for(int i=0;i<change.size();i++){
visit[change[i]]=1;
}
change.clear();
}
for(int i=1;i<=n;i++){
printf("%d:",i);
sort(ans[i].begin(),ans[i].end());
for(int j=0;j<ans[i].size();j++){
printf(" %d",ans[i][j]);
}
printf("\n");
}
for(int i=0;i<1003;i++){
ans[i].clear();
}
}
}