第十周项目1(2)-由后序序列和中序序列构造二叉树

来源:互联网 发布:2016国产网络剧排行榜 编辑:程序博客网 时间:2024/06/05 09:14
  1. /* 
  2. *Copyright(c)2017,烟台大学计算机学院 
  3. *All right reserved. 
  4. *文件名:sk.cpp btree.h btree.cpp 
  5. *作者:盛凯 
  6. *完成日期:2017年11月30日 
  7. *版本号:v1.0 
  8. * 
  9. *问题描述:后序序列和中序序列构造二叉树
  10. *输入描述:无 
  11. *程序输出:见运行结果 
    sk.cpp:
  12. #include <stdio.h>
    #include <malloc.h>
    #include "btree.h"


    BTNode *CreateBT2(char *post,char *in,int n)
    /*post存放后序序列,in存放中序序列,n为二叉树结点个数,
    本算法执行后返回构造的二叉链的根结点指针*/
    {
        BTNode *s;
        char r,*p;
        int k;
        if (n<=0) return NULL;
        r=*(post+n-1);                          //根结点值
        s=(BTNode *)malloc(sizeof(BTNode));     //创建二叉树结点*s
        s->data=r;
        for (p=in; p<in+n; p++)                 //在in中查找根结点
            if (*p==r)
                break;
        k=p-in;                                 //k为根结点在in中的下标
        s->lchild=CreateBT2(post,in,k);         //递归构造左子树
        s->rchild=CreateBT2(post+k,p+1,n-k-1);  //递归构造右子树
        return s;
    }


    int main()
    {
        ElemType in[]="DGBAECF",post[]="GDBEFCA";
        BTNode *b2;
        b2=CreateBT2(post,in,7);
        printf("b2:");
        DispBTNode(b2);
        printf("\n");
        return 0;
    }
  13. 程序运行结果如图所示:

  14. 反思总结:
  15. 先从后序中找出根节点,然后再运动递归思想,将每个元素找出。
阅读全文
0 0
原创粉丝点击