由中序遍历序列和后续遍历序列恢复二叉树

来源:互联网 发布:网络大学报名流程 编辑:程序博客网 时间:2024/05/18 01:07

在网上找了很多 发现都大多是前序和中序恢复树的 今天就写一个后序和中序恢复树的代码 其实很好理解

BinTree*  ReBuildTree(char * post, int i, int j, char * in, int m, int n){    //post[i.....j] in[m....n]    int x;  //x是遍历器    BinTree* p;   //p是新的结点    p = (BinTree*)malloc(sizeof(BinTree));    p->data = *(post + j);      //从后序序列中读取结点信息    x = m;    for (; (*(in + x) != *(post + j)); x++);//在中序中找到根节点位置    //接下来递归完成左右子树的构建    //中序序列的第一个就是根节点,那么它没有左子树    if (x == m) p->lchild = NULL;    else    {        p->lchild = ReBuildTree(post, i, i+ x-m-1, in, m, x-1);    }    if (x == n) p->rchild = NULL;    //中序序列的最后一个是根节点,那么它没有右子树    else    {        p->rchild = ReBuildTree(post,i+x-m,j-1,in,x+1,n);    }    return p;//最后返回这个根节点}
阅读全文
0 0
原创粉丝点击