建立二叉树的二叉链表(已知先序和中序,求后序)

博客主要讲述了基于已知的先序和中序序列,来建立二叉树的二叉链表,并求出其后序序列,涉及数据结构中二叉树的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建立二叉树的二叉链表(已知先序和中序,求后序)



#include <stdio.h>
#include <stdlib.h>
#include <string.h>    //原理:由前序和中序可以确定唯一的二叉树
typedef struct Node
{
    char Data;
    struct Node* LChild;
    struct Node* RChild;          //先序遍历创建
}BiTNode,*PBiTNode;
char pre[200],in[200];
PBiTNode CreatepostBiTree(int pre_start,int pre_end,int in_start,int in_end)
{
    int i,LTreeLen,RTreeLen;
    PBiTNode T;
    T=(PBiTNode)malloc(sizeof(BiTNode));  //建立根节点
    T->Data=pre[pre_start];               //遍历前序储存的结点,因为是先序,所以树第一个是数一定是A,
    T->LChild=T->RChild=NULL;             //置空的方法。
    i=in_start;
    while(in[i]!=T->Data)
    i++;
    LTreeLen=i-in_start;                  //左子树长度 ,这自己画下图就可以知道。
    RTreeLen=in_end-i;                    //右子树长度
    if(LTreeLen)                          //LTreeLen长度为0就结束。
    T->LChild=CreatepostBiTree(pre_start+1,pre_start+LTreeLen,in_start,i-1); //啊,这个规律记住就行。
    if(RTreeLen)
    T->RChild=CreatepostBiTree(pre_start+LTreeLen+1,pre_end,i+1,in_end);
    return T;                           //一个对一个就直接return;
}
PBiTNode temp()
{
    PBiTNode T;
    int Len_pre,Len_in;
    Len_pre=strlen(pre);
    Len_in=strlen(in);
    T=CreatepostBiTree(0,Len_pre-1,0,Len_in-1);
    return T;
}
void print(PBiTNode bt)
{
    if(bt!=NULL)
    {
        print(bt->LChild);
        print(bt->RChild);
        printf("%c",bt->Data);
    }
}
int main()
{
    PBiTNode bt;
    scanf("%s",pre);
    getchar();
    scanf("%s",in);
    bt=temp();
    print(bt);
    printf("\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值