已知中序遍历和先序遍历求后序遍历

zxzmnh 2019-09-22 原文

已知中序遍历和先序遍历求后序遍历

  给一棵树的先序遍历和中序遍历如下:

先序遍历:ABCDEFGHI

后序遍历:CEDFBAHGI

后序遍历结果:EFDCBHIGA

首,先序遍历的过程为根-左-右,中序遍历的过程为左-根-中,后序遍历的过程为 左-右-根

由先序遍历过程可知先序遍历最开始的都是根,所以可以由先序遍历的根对应中序遍历中的根从而在中序遍历中对树进行划分。

划分结果

先序遍历的根: 

A B C D E F G H I

    

下面是递归求解的过程,过程中注意每一个子区间代表一课子树,在判断子树根的位置时要考虑这棵子树是否有左子树或者右子树,对没有的情况要特判

#include<stdio.h>
#include<cstring>
#pragma warning(disable:4996)
#define maxn 100000
using namespace std;
char s1[maxn];
char s2[maxn];
void dfs(char root, int pos, int l, int r)
{
    if (r - l <= 1)
    {
        if(root != ' ')
        printf("%c", root);
        return;
    }
    for (int i = l; i < r; i++)
    {
        if (s2[i] == root)
        {
            char t = pos + 1 < strlen(s1)&&i !=l ? s1[pos + 1] : ' ';//i == l 没有左子树
            dfs(t, pos + 1, l, i);
            t = pos + 1 + i - l < strlen(s1)&&i!=r-1 ? s1[pos + 1 + i - l] : ' ';//i= r-1没有右子树
            dfs(t, pos + 1 + i - l, i+1, r);
            printf("%c", root);
        }
    }


}
int main()
{
    scanf("%s%s",s1,s2);
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    char root = s1[0];
    dfs(root, 0, 0, len2);
    getchar();
    getchar();
    return 0;
}

 

 你不勇敢,没人替你坚强!

posted on
2019-09-22 15:34 等下一班车 阅读() 评论() 编辑 收藏

 

版权声明:本文为zxzmnh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zxzmnh/p/11567697.html

已知中序遍历和先序遍历求后序遍历的更多相关文章

随机推荐

  1. openwrt的sysupgrade和factory固件的区别

    openwrt的固件一般分两种类型:factory原厂固件、sysupgrade固件 factory多了一些验 […]...

  2. linux配置防火墙详细步骤(iptables命令使用方法)

    通过本教程操作,请确认您能使用linux本机。如果您使用的是ssh远程,而又不能直接操作本机,那么建议您慎重, […]...

  3. 项目版本号规范

    云生产环境3位,开发与测试环境4位不另区分内外版本,使版本号管理简易,同时满足内部版本号管理规范、回滚快速定位 […]...

  4. 开源 , KoobooJson一款高性能且轻量的JSON框架

    KoobooJson – 更小更快的C# JSON序列化工具(基于表达式树构建)     在C#领 […]...

  5. SPSS AMOS常用统计软件及科研神器安装包资源【SPSS 006期】

    一、教学内容 二、备注 相关资料已上传我的资源,下载链接https://blog.csdn.net/TIQCm […]...

  6. BZOJ 2733: [HNOI2012]永无乡

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 1 […]...

  7. BF算法和KMP算法

    主要回顾一下两大字符串比较算法,也算自己的一次深入研究。 这两天复习数据结构(严蔚敏版),记录第四章串中的两个 […]...

  8. 探究final在java中的作用

    目录 一. final修饰变量 1. 基础: final修饰基本数据类型变量和引用数据类型变量. 2. 进阶: […]...

展开目录

目录导航