同学整理的,顺便传上分享下
一,已知先序和中序 求后序
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 char s1[10],s2[10],ans[10]; 6 int o = 0; 7 void tree(int n , char * s1 , char * s2 , char* s) 8 { 9 if(n <= 0) return ; 10 int p = strchr(s2,s1[0])-s2; //找到根结点在中序遍历中的位置 strchr 查找根节点字符在s1中首次出现的位置 11 tree(p,s1+1,s2,s); //递归构造左子树的后续遍历 12 tree(n-p-1,s1+p+1,s2+p+1,s+p); //递归构造右子树的后序遍历 13 s[n-1]=s1[0]; //把根节点添加到最后 14 } 15 int main() 16 { //输入的是先序和中序 17 while(cin>>s1>>s2) 18 { 19 int n = strlen(s1); 20 tree(n,s1,s2,ans); 21 ans[n]='