根据后序和中序遍历输出先序遍历

根据后序和中序遍历输出先序遍历

后序遍历+中序遍历---->>>>先序遍历
输入

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出

Preorder: 4 1 3 2 6 5 7

思路:*找规律,
由后序为主体,每一个入树的都是后序的,从后序结果最后一个开始入树,一个一个往前。
找到一个后序的就去中序结果中找这一个后序数字所在位置,分出左右,再入树,继续找…
代码如下

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct TNode* BinTree;
struct TNode
{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};
BinTree CreatBintree(int n,int Late[],int Mid[])
{

    if(n<=0)
        return 0;
    else
    {
        BinTree Root=(BinTree)malloc(sizeof(struct TNode));
        Root->Data=Late[n-1];
        Root->Left=NULL;
        Root->Right=NULL;
        int i;
        for( i=0;i<n;i++)
        {
            if(Mid[i]==Late[n-1])
            break;
        }
        Root->Left=CreatBintree(i,Late,Mid);
        Root->Right=CreatBintree(n-i-1,Late+i,Mid+i+1);
        return Root;
    }

}
void PreorderTraversal(BinTree BT)
{
    if(BT==NULL)
        return;
    else
    {
        printf(" %d",BT->Data);
        PreorderTraversal(BT->Left);
        PreorderTraversal(BT->Right);
        return ;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    int Late[n],Mid[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&Late[i]);
    }
    for(int i=0;i<n;i++)
    {
        scanf("%d",&Mid[i]);
    }
    BinTree BT;
    BT=CreatBintree(n, Late, Mid);
    printf("Preorder:");
    PreorderTraversal(BT);
}

今天又做了一道差不多的题,又想了想,不需要建树,想太多落入下乘了,题目只需要输出,去掉与树有关的
注意:我将int型换成char型了
代码:

#include <stdio.h>
#include <stdlib.h>
int n;
void CreatTree(int n,char after[],char mid[])
{
    if(n<0)
        return ;
    else
    {
        printf("%c",after[n]);
        int i;
        for(i=0;i<=n;i++)
        {
            if(mid[i]==after[n])
                break;
        }
        CreatTree(i-1,after,mid);
        CreatTree(n-i-1,after+i,mid+i+1);
        return ;
    }
}
int main()
{
    char after[1000];
    char mid[1000];
    scanf("%d",&n);
    scanf("%s",after);
    scanf("%s",mid);
    CreatTree(n-1,after,mid);
    return 0;
}
  • 15
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baibai___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值