
/*
设有一颗满二叉树(所有节点值均不同),已知其先序序列为pre,设计一个算法求其后序序列post
分析:
题目已经告诉我们是一颗满二叉树,那我们就可以从先序序列推出后序序列,因为满二叉树总是对半分的,具体操作:
1、找出先序序列的根节点,将其放入后序序列数组末尾;
2、将根节点之后的节点分成左右两堆,在分别执行上一步
3、直至全部处理完
*/
#include <stdio.h>
void preToPost(char *arrPre,char *arrPost,int l1,int h1,int l2,int h2) {
//l1,h1,l2,h2代表arrPre和arrPost的起点和末尾
int half;
if (l1 <= h1) {
half = (h1 - l1) / 2;
*(arrPost + h2) = *(arrPre + l1);
preToPost(arrPre, arrPost, l1 + 1, l1 + half, l2, l2 + half - 1);//左边
preToPost(arrPre, arrPost, l1 + half + 1, h1, l2+ half, h2-1);//右边
}
}
int main() {
char arrPre[] = {'A','B','D','M','C','F','G'},arrPost[7];
preToPost(arrPre,arrPost,0,6,0,6);
for (int i = 0; i < 7;i++) {
printf("%c ",*(arrPost+i));
}
return 0;
}