#include <stdio.h>
#define ElemType char
void PretoPost(ElemType pre[],int l1,int h1,ElemType post[],int l2,int h2){
int half;
if(h1>=l1){
post[h2]=pre[l1];
half=(h1-l1)/2;
printf("l1+1 = %d,l1+half = %d,l2 = %d,l2+half-1 = %d\r\n",l1+1,l1+half,l2,l2+half-1);
PretoPost(pre,l1+1,l1+half,post,l2,l2+half-1);
printf("l1+half+1 = %d,h1 = %d,l2+half = %d,h2-1 = %d\r\n",l1+half+1,h1,l2+half,h2-1);
PretoPost(pre,l1+half+1,h1,post,l2+half,h2-1);
}
}
#define MAXSIZE 50
ElemType *pre="ABCDEFG";
ElemType post[MAXSIZE];
int main(void) {
int i;
PretoPost(pre,0,6,post,0,6);
printf("前序序列\r\n");
puts(pre);
printf("后序序列\r\n");
for(i=0;i<=6;i++)
printf("%c",post[i]);
return 0;
}
A
B E
C D F G
运行结果:
l1+1 = 1,l1+half = 3,l2 = 0,l2+half-1 = 2
l1+1 = 2,l1+half = 2,l2 = 0,l2+half-1 = 0
l1+1 = 3,l1+half = 2,l2 = 0,l2+half-1 = -1
l1+half+1 = 3,h1 = 2,l2+half = 0,h2-1 = -1
l1+half+1 = 3,h1 = 3,l2+half = 1,h2-1 = 1
l1+1 = 4,l1+half = 3,l2 = 1,l2+half-1 = 0
l1+half+1 = 4,h1 = 3,l2+half = 1,h2-1 = 0
l1+half+1 = 4,h1 = 6,l2+half = 3,h2-1 = 5
l1+1 = 5,l1+half = 5,l2 = 3,l2+half-1 = 3
l1+1 = 6,l1+half = 5,l2 = 3,l2+half-1 = 2
l1+half+1 = 6,h1 = 5,l2+half = 3,h2-1 = 2
l1+half+1 = 6,h1 = 6,l2+half = 4,h2-1 = 4
l1+1 = 7,l1+half = 6,l2 = 4,l2+half-1 = 3
l1+half+1 = 7,h1 = 6,l2+half = 4,h2-1 = 3
前序序列
ABCDEFG
后序序列