[湖南大学程序设计实训训练作业一]9.二叉树遍历,从前序、中序到后序(二叉树呀,面试必考哦!)
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.二叉树遍历,从前序、中序到后序(二叉树呀,面试必考哦!)相关推荐
- [湖南大学程序设计实训训练作业一]3.拳王阿里
3.拳王阿里 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 阿里是上个世纪美国最著名的拳击手,阿里在20年的时间里多次获得重量级拳王称号.不过不 ...
- [湖南大学程序设计实训训练作业三]1.部分A+B(字符串搜索)
1.部分A+B [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的 ...
- [湖南大学程序设计实训训练作业二]5.点球大战
5.点球大战 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 在足球比赛中,有不少赛事,例如世界杯淘汰赛和欧洲冠军联赛淘汰赛中,当比赛双方经过正规 ...
- [湖南大学程序设计实训训练作业二]12. 绩点计算
12. 绩点计算 [问题描述] [输入形式] [输出形式] [样例输入] [样例输出] 题解 思路 代码 [问题描述] 学校对本科生的成绩施行绩点制(GPA).将学生的实际考分根据不同学科的不同学分按 ...
- 【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)
大家好,各位努力奋斗的大学生小伙伴们!今天,我将带你们领略一项令人惊叹的程序设计奇迹--<奖学金评定系统>!是不是感到激动呢?别急,让我为你们揭开这个能让你在C语言程序设计中拿满分的秘密武 ...
- c语言程序设计实训教材,C语言程序设计实训指导书
摘要: 李建中等编著的这本<C语言程序设计实训指导书>为<C语言程序设计>的配套教材.全书共分4部分.第1部分主要介绍Visual C++6.0的集成功能界面和操作;第2部分配 ...
- c语言程序设计王电化教材答案中国铁道,(教材)C语言程序设计实训指导与习题解答...
图书简介 <高职高专计算机系列规划教材:C语言程序设计实训指导与习题解答>是安徽省高等学校"十一五"省级规划教材的<C语言程序设计>(方少卿主编)的配套实训 ...
- c语言程序设计实训太空战机,清华大学出版社-图书详情-《C程序设计实训教程(第2版)》...
前 言 "C程序设计"是一门实践性很强的课程,学习本课程既要理解C语言的基本理论和基本知识,更要掌握应用理论知识编写程序的方法和技能.为此,编者基于长期从事"C程序设计& ...
- 单片机c语言程序设计实训报告,(整理)单片机C语言程序设计实训100例.doc
(整理)单片机C语言程序设计实训100例.doc .单片机C语言程序设计实训100例基于8051Proteus仿真案例第 01 篇 基础程序设计01闪烁的LED/* 名称闪烁的LED说明LED按设定的 ...
最新文章
- CMB标量功率谱第一个谱指数跑动项n(1)跑动带来的影响
- Struts2学习笔记(五)之异常处理机制
- Jupyter配置步骤
- POJ 1088-滑雪
- 卢伟冰暗示Redmi K40轻奢版:搭载联发科天玑1100
- python中读取和保存图片的方法对比
- linux 软件应用
- 20200619每日一句
- 北大中文核心期刊目录2021年 电工技术
- C#,欧拉常数(Euler Constant)的算法与源代码
- 从未在一起更让人遗憾_从未在一起和最终没有在一起哪个更遗憾
- mysql登录其他电脑_如何连接另一台电脑的mysql数据库
- 产品定位,什么是产品?什么是产品定位?
- 从零开始的Nginx详解(2)【Nginx-HTTP服务器】
- Line-line Intersection
- 【金猿投融展】齐治科技——数据中心安全管理领军者
- APP开发所需时间,看完这些你就懂了
- 结构光之格雷码编码加相移算法详解与实现(多种编码程序)
- SaaSpace:值得尝试的8种最佳免费营销自动化软件
- 安装Linux引导windows双系统,不出现引导界面