中序和后续遍历的结果来确定树

本文介绍了一种根据中序和后序遍历序列重建二叉树结构的方法,并提供了完整的C语言实现代码。该方法首先找到根节点,然后递归地构建左子树和右子树。

大致思路和通过中序和先序确定树的结构相同。

代码如下:

#include <stdio.h>
#include <stdlib.h>
//建立节点
struct BTNode
{
    char date;
    BTNode* Leftchild;
    BTNode* Rightchild;
};
BTNode *in_and_post_CreateTree(char *in,char *post,int n)//a是中序,b是后续
{
    BTNode *S;//用于返回的S节点
    char *p;//循环只用,为了找出in的与*post(n-1)相同的节点指针
    int k;//用于确定递归中要求的节点个数
    if (n<=0)
        return NULL;
    S=(BTNode*)malloc(sizeof(BTNode));
    S->date=*(post+n-1);
    for (p=in;p<in+n;p++)
    {
        if (*p==*(post+n-1))
            break;
    }
    k=p-in;
    S->Leftchild=in_and_post_CreateTree(in,post,k);
    S->Rightchild=in_and_post_CreateTree(in+k+1,post+k,n-k-1);
    return S;
}

//用于检验结果之用
void PREOrder(BTNode* T)
{
    if (T!=NULL)
    {
        printf("%c\n",T->date);
        PREOrder(T->Leftchild);        
        PREOrder(T->Rightchild);
    }
}


int main()
{

    char Stra[30]="DGBAECF";
    char Strb[30]="GDBEFCA";
    BTNode *Root;
    Root=in_and_post_CreateTree(Stra,Strb,7);
    PREOrder(Root);
}

 

转载于:https://www.cnblogs.com/lisongfeng9213/p/3426136.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值