http://acm.hdu.edu.cn/showproblem.php?pid=5444
一棵二叉树 给出先序序列 中序默认1 2 .. .n 然后q次询问 每次问从根节点到询问点的路径
一开始觉得还原不好写 但是发现中序是单增的 所以直接扫一遍先序序列 大值插右 小值插左即可
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int c[maxn][2];
int n,q,root;
int main()
{
int t,i,val,cur,r;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(c,0,sizeof(c));
for(i=1;i<=n;i++)
{
scanf("%d",&val);
if(i==1) root=val;
else
{
cur=root;
while(1)
{
if(val<cur) r=0;
else r=1;
if(c[cur][r]==0)
{
c[cur][r]=val;
break;
}
else cur=c[cur][r];
}
}
}
scanf("%d",&q);
while(q--)
{
scanf("%d",&val);
cur=root;
while(cur!=val)
{
if(val<cur)
{
cur=c[cur][0];
printf("E");
}
else
{
cur=c[cur][1];
printf("W");
}
}
printf("\n");
}
}
return 0;
}