总体方法用的是前序遍历根左右
#include <bits/stdc++.h>
using namespace std;
char t[1000000];
void dfs(int p,string s)
{
int len=s.size();
if(len==1)
{
t[p]=s[0];
return ;
}
int mid=len/2;
dfs(p*2,s.substr(0,len/2));
dfs(p*2+1,s.substr(mid,len/2));
if(t[p*2]==t[2*p+1]){
t[p]=t[p*2];
}
else{
t[p]='S';
}
}
void dfsPre(int u,int len)
{
if(len==0)
{
return ;
}
cout<<t[u];
dfsPre(2*u,len/2);
dfsPre(2*u+1,len/2);
}
int main()
{
int n;
string s;
cin>>n;
cin>>s;
dfs(1,s);
dfsPre(1,s.size());
return 0;
}