二叉树--已知前序遍历和中序遍历,输出后续遍历

本文介绍了一种通过给定的二叉树先序序列和中序序列,编程计算并输出该二叉树后序序列的方法。提供了一个简单的C语言源码示例,展示了如何递归地构建二叉树,并输出其后序遍历序列。

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

原创作品,转载请标明http://blog.youkuaiyun.com/yming0221/article/details/7422336

已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。

输入说明:仅一组数据,分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。

输出说明:在一行上输出该二叉树的后序序列。

输入样本:

ABDGCEFH

DGBAECHF

输出样本:

GDBEHFCA


简单 源码如下:

#include <stdio.h>
#include <string.h>
#define MAX 101
char preoder[MAX];
char inoder[MAX];
void build(int preleft,int preright,int inleft,int inright)
{
    int i,lsize,rsize;
    if(preleft <= preright && inleft <= inright)
    {
        for(i = inleft;i <= inright;i++)//在中序遍历中查找根结点
        {
            if(preoder[preleft] == inoder[i]) break;
        }
        lsize = i - inleft;
        rsize = inright - i;

        //递归创建左子树
        if(lsize > 0) build(preleft + 1,preleft + lsize,inleft,i - 1);

        //递归创建右子树
        if(rsize > 0) build(preleft + 1 + lsize,preright,i + 1,inright);

        //输出根结点
        printf("%c",preoder[preleft]);
    }
}
int main()
{
    //freopen("input","r",stdin);

    scanf("%s %s",preoder,inoder);

    int psize,insize;
    psize = strlen(preoder);
    insize = strlen(inoder);

    build(0,psize - 1,0,insize - 1);

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值