poj2255

Tree Recovery

#include “iostream” #include “math.h” using namespace std; #define Max 27 void left_inorder(char* str1,char *str2,char *res_l,char *res_r); void left_pre(char* str1,char *str2,char *res,char *res2) { char left[Max]; char right[Max]; memset(left,0,Max); memset(right,0,Max); left_inorder(str1,str2,left,right); int i=0;//记录str1当前已判断的节点数 int k=0;//记录res当前已存入的节点数 while(str1[i]!=0) { int j=0;//记录left当前已判断的节点数 while(left[j]!=0) { if(str1[i]==left[j])break; else j++; } if(left[j]!=0) { res[k]=str1[i]; k++; } i++; } i=0;//记录str1当前已判断的节点数 k=0;//记录res当前已存入的节点数 while(str1[i]!=0) { int j=0;//记录left当前已判断的节点数 while(right[j]!=0) { if(str1[i]==right[j])break; else j++; } if(right[j]!=0) { res2[k]=str1[i]; k++; } i++; } } void left_inorder(char* str1,char *str2,char *res_l,char *res_r) { int i=0; while(str1[0]!=str2[i]) { res_l[i]=str2[i]; i++; } i++; int j=0; while(str2[i]!=0) { res_r[j]=str2[i]; j++; i++; } } void recovery(char* str1,char *str2) { if(str2[0]==0)return; char l_pre[Max]; char l_inorder[Max]; char r_pre[Max]; char r_inorder[Max]; memset(l_pre,0,Max); memset(l_inorder,0,Max); memset(r_pre,0,Max); memset(r_inorder,0,Max); left_inorder(str1,str2,l_inorder,r_inorder); left_pre(str1,str2,l_pre,r_pre); recovery(l_pre,l_inorder); recovery(r_pre,r_inorder); cout<<str1[0]; } int main() { char pre[Max]; char inorder[Max]; memset(pre,0,Max); memset(inorder,0,Max); while(cin>>pre>>inorder) { recovery(pre,inorder); cout<<endl; memset(pre,0,Max); memset(inorder,0,Max); } return 0; }

点赞