83.png

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