Elven Postman HDU - 5444

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;
}

猜你喜欢

转载自blog.csdn.net/sunyutian1998/article/details/83184809