(苦心研究2小时!)
#include<bits/stdc++.h> using namespace std; #define N 1005 struct Node { char val; int left,right; }; Node node[N]; int p; int createTree(string sl,string sm) { if(sm==""||sl=="") { return 0; } int np=++p; node[np].val=sl[0]; int j; for(j=0; j<sm.length(); ++j) { if(sm[j]==sl[0]) { break; } } string sm_left=sm.substr(0,j),sm_right=sm.substr(j+1); string sl_left,sl_right; bool isLeft[128] = {}; for(int i=0; i<sm_left.length(); ++i) { isLeft[sm_left[i]]=true; } for(int i=1; i<sl.length(); ++i) { if(isLeft[sl[i]]) { sl_left.push_back(sl[i]); } else { sl_right.push_back(sl[i]); } } node[np].left=createTree(sl_left,sm_left); node[np].right=createTree(sl_right,sm_right); return np; } void preOrder(int r) { if(r==0) { return; } preOrder(node[r].left); preOrder(node[r].right); cout<<node[r].val; } int main() { string s_mid,s_lev;//别在意名字 cin>>s_lev>>s_mid; int root=createTree(s_lev,s_mid); preOrder(root); return 0; }