建立二叉树的二叉链表(严6.65)

Description

已知一棵二叉树的前序序列和中序序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。

Input

分两行分别输入一棵二叉树的前序序列和中序序列。

Output

输出该二叉树的后序序列。

  • Sample Input 
    ABDFGCEH
    BFDGACEH
  • Sample Output
    FGDBHECA
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef struct BinTreeNode
{
    char data;
    struct BinTreeNode *lchild;
    struct BinTreeNode *rchild;
}BinTree, *PBinTree;

char pre[50],mid[50];
PBinTree CreateBinTree(int pre_start,int pre_end,int mid_start,int mid_end)
{
    PBinTree root = (PBinTree)malloc(sizeof(BinTree));
    root->data=pre[pre_start];
    root->lchild=NULL;
    root->rchild=NULL;
    int i;
    i=mid_start;
    while(mid[i]!=root->data)
        i++;

    int LTreeLen=i-mid_start;
    int RTreeLen=mid_end-i;
    if(LTreeLen)
    {
        root->lchild=CreateBinTree(pre_start+1,pre_start+LTreeLen,mid_start,i-1);
    }
    if(RTreeLen)
    {
        root->rchild=CreateBinTree(pre_start+LTreeLen+1,pre_end,i+1,mid_end);
    }
    return root;
}

void PrintBinTree (PBinTree p)
{
    if(p->lchild)
    {
        PrintBinTree(p->lchild);
    }
    if(p->rchild)
    {
        PrintBinTree(p->rchild);
    }
    printf("%c",p->data);
}

PBinTree Algo()
{
    int len_pre,len_mid;
    PBinTree T;
    len_pre=strlen(pre);
    len_mid=strlen(mid);
    T=CreateBinTree(0,len_pre-1,0,len_mid-1);
    return T;
}
int main()
{
    gets(pre);
    gets(mid);
    PBinTree T;
    T = Algo();
    PrintBinTree(T);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhao2018/article/details/80099413