#include<bits/stdc++.h>
using namespace std;
const int N=35;
int a[N],b[N],p[N],n;
vector<int> ans[N];
void dfs(int al,int ar,int bl,int br,int d)
{
if(al>ar) return ;
int k=p[a[ar]];
ans[d].push_back(a[ar]);
dfs(al,al+k-1-bl,bl,k-1,d+1);
dfs(al+k-bl,ar-1,k+1,br,d+1);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i],p[b[i]]=i;
dfs(0,n-1,0,n-1,0);
for(int i=0;i<n;i++)
for(int t:ans[i])
if(!i) cout<<t;
else cout<<' '<<t;
return 0;
}
L2-006 树的遍历(极精简与好理解)
最新推荐文章于 2024-11-06 23:10:00 发布
该程序读取一个整数n和两个整数数组a和b,利用p数组存储b数组的索引。它执行深度优先搜索(DFS)来分割数组a,每次分割由p[a[ar]]确定。最终,程序输出分割的结果。
摘要由CSDN通过智能技术生成