9.二叉树遍历,从前序、中序到后序

  • 【写在前面】---补充知识
  • 【问题描述】
  • 【输入形式】
  • 【输出形式】
  • 【样例输入】
  • 【样例输出】
  • 题解
    • 思路
    • 代码

【写在前面】—补充知识

之前写过剑指offer,里面有很多二叉树的题目,这题和重建二叉树有点像,同学们可以看一下。
[剑指offer]JT4—重建二叉树(破镜难以重圆,但是二叉树可以)
这篇博客里面介绍了前序中序和后序遍历的区别!

【问题描述】

二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的。对于二叉树,深度遍历有前序、中序以及后序三种遍历方法。

三种基本的遍历思想为:

前序遍历:根结点 —> 左子树 —> 右子树

中序遍历:左子树—> 根结点 —> 右子树

后序遍历:左子树 —> 右子树 —> 根结点

比如,求以下二叉树的各种遍历

前序遍历:1 2 4 5 7 8 3 6

中序遍历:4 2 7 5 8 1 3 6

后序遍历:4 7 8 5 2 6 3 1

需要你编写程序解决的问题是:已知一个二叉树的前序遍历和中序遍历的结果,给出该二叉树的后序遍历的结果。

【输入形式】

有多组测试数据,每组测试数据三行,每组测试数据第一行只有一个正整数n,表示二叉树节点的数目,n=0意味着输入结束并且不需要处理。

每组测试数据第二行是二叉树的前序遍历的结果,是一个长度为n的字符串,每个节点由一个字符表示,字符是大小写英文字母及10个数字,不同的节点用不同的字符表示,也即无论前序遍历和中序遍历的字符串中没有重复的字符。

每组测试数据第二行是二叉树的中序遍历的结果,也是一个长度为n的字符串。

40%的测试数据1 ≤ n≤ 10;

30%的测试数据1 ≤ n≤ 20;

20%的测试数据1 ≤ n≤ 40;

10%的测试数据1 ≤ n≤ 62;

【输出形式】

对于每组测试数据,输出一行,是一个长度为n的字符串,表示二叉树后序遍历的结果。

【样例输入】

8
12457836
42758136
4
abcd
abcd
4
abcd
dcba
0

【样例输出】

47852631
dcba
dcba

题解

思路

  • 1.基本所有的树和链表的问题我们都会用到递归,所以我们是递归解题
  • 注意:和重建二叉树不同的是,我们要得到后序遍历,那么输出左子树->右子树->根节点
  • 注意:控制输出的代码部分的函数入口的值,也就是寻找左子树和右子树的范围

代码

#include <iostream>
#include <vector>
using namespace std;
struct TreeNode{TreeNode *left;TreeNode *right;char elem;
};
void func(string pre, string in, int prestart, int instart, int inend){if(instart >= inend){return;}int index;for(index=instart; index<inend; ++index){if(in[index] == pre[prestart]) break;}func(pre, in, prestart+1, instart, index);//先输出左子树 func(pre, in, prestart+ 1 + index - instart,  index+1, inend);//再输出右子树 cout<<in[index];//最后输出根节点
}
int main(){string a,b;int n;while(cin>>n && n){cin>>a>>b;func(a, b, 0, 0, n);cout<<endl;}return 0;
} 

[湖南大学程序设计实训训练作业一]9.二叉树遍历,从前序、中序到后序(二叉树呀,面试必考哦!)相关推荐

  1. [湖南大学程序设计实训训练作业一]3.拳王阿里

    3.拳王阿里 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 阿里是上个世纪美国最著名的拳击手,阿里在20年的时间里多次获得重量级拳王称号.不过不 ...

  2. [湖南大学程序设计实训训练作业三]1.部分A+B(字符串搜索)

    1.部分A+B [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的 ...

  3. [湖南大学程序设计实训训练作业二]5.点球大战

    5.点球大战 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 在足球比赛中,有不少赛事,例如世界杯淘汰赛和欧洲冠军联赛淘汰赛中,当比赛双方经过正规 ...

  4. [湖南大学程序设计实训训练作业二]12. 绩点计算

    12. 绩点计算 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 学校对本科生的成绩施行绩点制(GPA).将学生的实际考分根据不同学科的不同学分按 ...

  5. 【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)

    大家好,各位努力奋斗的大学生小伙伴们!今天,我将带你们领略一项令人惊叹的程序设计奇迹--<奖学金评定系统>!是不是感到激动呢?别急,让我为你们揭开这个能让你在C语言程序设计中拿满分的秘密武 ...

  6. c语言程序设计实训教材,C语言程序设计实训指导书

    摘要: 李建中等编著的这本<C语言程序设计实训指导书>为<C语言程序设计>的配套教材.全书共分4部分.第1部分主要介绍Visual C++6.0的集成功能界面和操作;第2部分配 ...

  7. c语言程序设计王电化教材答案中国铁道,(教材)C语言程序设计实训指导与习题解答...

    图书简介 <高职高专计算机系列规划教材:C语言程序设计实训指导与习题解答>是安徽省高等学校"十一五"省级规划教材的<C语言程序设计>(方少卿主编)的配套实训 ...

  8. c语言程序设计实训太空战机,清华大学出版社-图书详情-《C程序设计实训教程(第2版)》...

    前 言 "C程序设计"是一门实践性很强的课程,学习本课程既要理解C语言的基本理论和基本知识,更要掌握应用理论知识编写程序的方法和技能.为此,编者基于长期从事"C程序设计& ...

  9. 单片机c语言程序设计实训报告,(整理)单片机C语言程序设计实训100例.doc

    (整理)单片机C语言程序设计实训100例.doc .单片机C语言程序设计实训100例基于8051Proteus仿真案例第 01 篇 基础程序设计01闪烁的LED/* 名称闪烁的LED说明LED按设定的 ...

最新文章

  1. CMB标量功率谱第一个谱指数跑动项n(1)跑动带来的影响
  2. Struts2学习笔记(五)之异常处理机制
  3. Jupyter配置步骤
  4. POJ 1088-滑雪
  5. 卢伟冰暗示Redmi K40轻奢版:搭载联发科天玑1100
  6. python中读取和保存图片的方法对比
  7. linux 软件应用
  8. 20200619每日一句
  9. 北大中文核心期刊目录2021年 电工技术
  10. C#,欧拉常数(Euler Constant)的算法与源代码
  11. 从未在一起更让人遗憾_从未在一起和最终没有在一起哪个更遗憾
  12. mysql登录其他电脑_如何连接另一台电脑的mysql数据库
  13. 产品定位,什么是产品?什么是产品定位?
  14. 从零开始的Nginx详解(2)【Nginx-HTTP服务器】
  15. Line-line Intersection
  16. 【金猿投融展】齐治科技——数据中心安全管理领军者
  17. APP开发所需时间,看完这些你就懂了
  18. 结构光之格雷码编码加相移算法详解与实现(多种编码程序)
  19. SaaSpace:值得尝试的8种最佳免费营销自动化软件
  20. 安装Linux引导windows双系统,不出现引导界面

热门文章

  1. 头哥 (Educoder)数据结构与算法实验:实验11 TYJ动态规划
  2. Ubuntu支持LinuxONE大型机:为云而生的强强新组合
  3. 17 | 分布式安全:上百个分布式节点,不会出现“内奸”吗?
  4. CRM下午茶(九)-老客户挽回
  5. 章节十六:编码和文件读写
  6. c语言取余规则_这是我的C语言入门笔记
  7. linux下查找占空间大的文件,Linux中查找当前目录下占用空间最大的前10个文件
  8. 9个常用的3D建模软件,你还知道哪些?
  9. EasyExcel的简单读取操作
  10. 文件上传之500错误