已知二叉树前序和中序遍历求后续递归

#include <bits/stdc++.h>
using namespace std;
char ss1[30],ss2[30],ss3[30];
void pro(int l1,int r1,int l2,int r2,int l3,int r3){//递归,l1,r1表示一颗完整的子树在ss1中应占的位置,其他类似,SS1为前序
    ss3[r3] = ss1[l1];
    if(l1 == r1||l2 == r2||l3 == r3) return ;
    for(int i = l2;i <= r2;i++){
        if(ss2[i] == ss1[l1]){
            if(i == l2) pro(l1+1,r1,i+1,r2,l3,r3-1);
            else if(i == r2) pro(l1+1,r1,l2,r2-1,l3,r3-1);
            else{
                int numl = i - l2,numr =r2 - i;
                pro(l1+1,l1+i-l2,l2,i-1,l3,i-l2+l3-1);
                pro(l1+i-l2+1,r1,i+1,r2,i-l2+l3,r3-1);
            }
        }
    }
}
int main() {
   // freopen("in.txt","r",stdin);
    while(~scanf("%s",ss1)){
        scanf("%s",ss2);
        int l = strlen(ss1);
        pro(0,l-1,0,l-1,0,l-1);
        for(int  i = 0;i < l;i++) printf("%c",ss3[i]);
        cout<<endl;
    }
    return 0;
}

老实说有点虚,不知道是不是对的,不过既然A了就留下来以后再试试,,,

原文地址:https://www.cnblogs.com/shimu/p/8529995.html