tree(i-la,la,lb-n-la+i);
tree(n+la-i-1,i+1,lb-1);

不用数字转
#include <iostream>
using namespace std;
string a,b;
inline void tree(int n,int la,int lb)
{
    if(n<=0) return;
    for(int i=la;i<=la+n-1;i++)
    {
        if(a[i]==b[lb])
        {
            cout<<b[lb];
            tree(i-la,la,lb-n-la+i);
            tree(n+la-i-1,i+1,lb-1);
            return ;
        }
    }
}
int main()
{
    cin>>a;
    cin>>b;
    tree(a.size(),0,a.size()-1);
    return 0;
}
用数字转
#include <iostream>
using namespace std;
string a,b;
int zz[1000086],hh[1000086];
int len1=0,len2=0,top;
inline void tree(int n,int la,int lb)
{
    if(n<=0) return;
    for(int i=la;i<=la+n-1;i++)
    {
        if(zz[i]==hh[lb])
        {
            cout<<char(hh[lb]+64);
            tree(i-la,la,lb-n-la+i);
            tree(n+la-i-1,i+1,lb-1);
            return ;
        }
    }
}
int main()
{
    cin>>a;
    cin>>b;
    for(int i=0;i<a.size();i++)
        zz[++len1]=int(a[i]-‘A‘+1);
    for(int i=0;i<b.size();i++)
        hh[++len2]=int(b[i]-‘A‘+1);
    tree(a.size(),1,a.size());
    return 0;
}