根据题意可以知道叶子结点必须要和他的父亲节点颜色相同,不是叶子节点的节点,而且还没有染色,也让他们和它的父亲同色,如果此时他的父亲已经染过色了那么他就没办法染色了,如果根节点孤寡,也不能染色。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int tot,n;
struct node{
    int t;
    int next;
}edage[maxn<<1];
int head[maxn];
void addedage(int x,int y){
    edage[++tot].t=y;
    edage[tot].next=head[x];
    head[x]=tot;
}
int f[maxn];// ran se or not 
int flag=false;
int cnt=0;
int col[maxn];
void dfs(int node,int fa){
    int son=0;
    for(int i=head[node];i!=-1;i=edage[i].next){
        if(edage[i].t==fa)continue;
        son++;
        dfs(edage[i].t,node);
    }
    if(son==0||f[node]==0){
        if(f[fa]!=0){
            flag=true;
            return ;
        }
        f[node]=f[fa]=++cnt;
    }
}
void dfs2(int node,int fa){
    for(int i=head[node];i!=-1;i=edage[i].next){
        if(edage[i].t==fa)continue;
        if(f[node]==f[edage[i].t]) col[edage[i].t]=col[node];
        else col[edage[i].t]=col[node]^1;
        dfs2(edage[i].t,node);
    }
}
int main(){
    cin>>n;
    memset(head,-1,sizeof(head));
    memset(edage,-1,sizeof(edage));
    for(int i=1;i<n;i++){
        int t1,t2;
        cin>>t1>>t2;
        addedage(t1,t2);
        addedage(t2,t1);
    }
    dfs(1,0);
    if(flag==true||f[0]!=0){
        cout<<-1<<endl;
        return 0;
    }
    col[1]=1;
    dfs2(1,0);
    for(int i=1;i<=n;i++){
        if(col[i]==1)cout<<"R";
        else cout<<"B";
    }
    return 0;
}