初学二叉写晕了求助
#include<bits/stdc++.h>
using namespace std;
const int maxn=26+10;
char s[maxn],z[maxn];
char root;
int xl,xr,zl,zr,zx[maxn],k,cnt;
struct node{
int lc,rc,val;
}tree[maxn];
void dfs(int xl,int xr,int zl,int zr){
k++;
tree[k].val=s[xl];
if(cnt==0){
tree[k].lc=0;
dfs(xl+1+cnt,xr,zl+cnt+1,zr);
}else if(strlen(s)-cnt==0){
tree[k].rc=0;
dfs(xl+1,xr+cnt,zl,zr+cnt-1);
}else{
dfs(xl+1,xr+cnt,zl,zr+cnt-1);
dfs(xl+1+cnt,xr,zl+cnt+1,zr);
}
}
void dfs2(char u){
if(u==0) return ;
dfs2(tree[u].lc);
dfs2(tree[u].rc);
cout<<u<<" ";
}
int main(){
for(int i=1;i<=strlen(z);i++) cin>>z[i];
cin>>s[1];root=s[1];
zl=0;zr=0;
for(int i=2;i<=strlen(s);i++) cin>>s[i];
zr=strlen(z);
for(int i=1;i<=strlen(s);i++){
if(zr!=i-1) cnt++;
if(z[i]==root) zl=i+1;
}
xl=2;xr=2+cnt-1;
dfs(xl,xr,zl,zr);
dfs2(root);
for(int i=1;i<=strlen(s);i++) cout<<tree[i].val;
return 0;
}