輸入一棵二叉樹的先序遍歷和中序遍歷,輸出它的後序遍歷序列。學習
運行如圖ui
目前還有一些細節沒有懂,不過不影響我仍然喜歡學習的心情~spa
#include<stdio.h> #include<string.h> #define N 1000 char s1[N],s2[N],ans[N]; //s1是先序遍歷,s2是中序遍歷 void build(int n,char *s1,char *s2,char *s) {//構造長度爲n的後續遍歷。 if(n <= 0) return; int p = strchr(s2,s1[0])-s2;//找到根結點在中序遍歷中的位置 build(p,s1+1,s2,s);//遞歸構造左子樹的後續遍歷 build(n-p-1,s1+1+p,s2+1+p,s+p);//遞歸構造右子樹的後續遍歷 s[n-1] = s1[0];//把根結點添加到最後 return; } int main() { while(scanf("%s%s",s1,s2)!=EOF) { int n = strlen(s1); build(n,s1,s2,ans); ans[n] = '\0';//ans存儲後續遍歷序列 printf("%s\n",ans); } return 0; }