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

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. 课后作业三

    2017*****7244 杨润鑫 一. 1.打开文件 2.读文到缓冲区 3.关闭文件 4.输出词频前十的单词 […]...

  2. mysql创建数据库和用户

    create database sonar character set utf8 collate utf8_g […]...

  3. Redis实战 | 持久化、主从复制特性和故障处理思路

    前言 前面两篇我们了解了Redis的安装、Redis最常用的5种数据类型。本篇总结下Redis的持久化、主从复 […]...

  4. C# JSON转为字符串

    //Deserialize<T>(String)   将JSON字符串转化为类型T。 JavaSc […]...

  5. IT解惑真经

    非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。   ——–韩愈《 […]...

  6. 上门取件API-取件状态推送接口

    前面我们介绍了上门取件接口,取消接口,接着我们讲解一下取件状态推送接口,上门取件下单成功以后,快递员收到订单, […]...

  7. 数据分析师

    使用VBA脚本实现Excel中的功能统计: (1) 统计总分大于180分的学生人数 (2) 统计数学大于语文成 […]...

  8. JS中 isNaN() 方法解析

    1. isNaN() 存在的意义 由于 NaN 是唯一一个不等于自身的值,不像其他的值,可以用相等操作符来判断 […]...

展开目录

目录导航