1 /*
2 a是前序序列
3 b是中序序列
4 后序序列将保存在c中
5 */
6 void PostOrder(const char a[], const char b[], char c[], int starta, int startb, int startc, int len)
7 {
8 if(len==0) return;
9 if(len==1) { c[startc] = a[starta]; return; }
10
11 c[startc+len-1] = a[starta];//处理树根
12
13 int i = startb;
14 while(b[i]!=a[starta]) ++i;
15 int leftlen = i - startb;
16 int rightlen = len - leftlen - 1;
17 PostOrder(a,b,c,starta+1,startb,startc,leftlen);//构造左子树的PostOrder
18 PostOrder(a,b,c,starta+leftlen+1,startb+leftlen+1,startc+leftlen,rightlen);//构造右子树的PostOrder
19 }