为什么普通树没有中序遍历和森林没有后序遍历
本文为个人理解,若有错误欢迎指正!
这里说的树当然是指普通的树,而不是树中比较特别的二叉树。
1.为什么普通树没有中序遍历
中序遍历是对于二叉树而言:
中序遍历左子树,访问根结点,中序遍历右结点。
在普通树中并不一定只有左右两颗子树,例如在下图中:
中序遍历:先访问左子树A,那么接下来要访问的点是B,还是R,是有歧义的,所以普通树没有中序遍历。
我们再来看看普通树的先序遍历和后序遍历:
(这里的遍历规则摘自严蔚敏的 《数据结构(C语言版 第2版)》p135)
先序遍历:先访问树的根结点,然后依次先序遍历根的每棵子树,其顺序为RABDECF。
后序遍历:先依次后序遍历每棵子树,然后访问根结点,其顺序为ADEBFCR。
这里由于普通树转成二叉树的特点,可以发现普通树的先序遍历等于其转化成的二叉树的先序遍历,后序遍历等于其转化成的二叉树的中序遍历,我们也可以发现二叉树的后序遍历在普通树中没有对应的遍历规则。
2.为什么森林没有后序遍历
以下图为例:
(这里右边图的“一整棵”主要是区分左下的多棵树)
这里我们先看森林的先序遍历和中序遍历:
(这里的遍历规则摘自严蔚敏的 《数据结构(C语言版 第2版)》p135)
森林的先序遍历规则:
(森林非空)
1.访问森林中第一棵树的根结点;
2.先序遍历第一棵树的根结点的子树森林;
3.先序遍历除去第一棵树之后剩余的树构成的森林。
就是对森林的每棵树进行先序遍历,这里的森林的先序遍历是ABCDEFGHIJK。
森林的中序遍历规则:
(森林非空)
1.中序遍历森林中第一颗树之后剩余的树构成的森林;
2.访问第一颗树的根结点;
3.中序遍历除去第一颗树之后剩余的树构成的森林。
就是对森林的每棵树进行后序遍历,这里的森林的中序遍历是BCDAFEIJHKG。
这里森林的中序遍历为何是森林中每棵树的后序遍历?我们在第一个问题有说到普通树的后序遍历等于其转化成的二叉树的中序遍历,所以这里我们可以看作以森林(森林中有n棵普通树,n>=0)转化成的一整棵二叉树的中序遍历作为遍历规则,所以本质上就是中序遍历。这也是森林为什么没有后序遍历的原因,因为森林的遍历实质上是看森林转化而成的一整棵二叉树,森林的xx遍历结果其实就是其转换而成的一整棵二叉树的xx遍历结果(就好像是在森林的遍历规则中就帮你做了从森林中的n棵普通树到一整棵二叉树的转换),而且我们在第一个问题有提到,二叉树的后序遍历在普通树中没有对应的遍历规则,所以森林没有后序遍历。
参考文章:
https://blog.csdn.net/ccqccq007/article/details/77430888?spm=1001.2014.3001.5506
为什么普通树没有中序遍历和森林没有后序遍历相关推荐
- 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...
- 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...
本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...
- 已知满二叉树先序序列存在于数组中,设计算法将其变成后序序列
解题思路: 满二叉树:除最后一层无任何子结点外,每一层上的所有结点都有两个以上的结点 先序序列:DLR 后序序列:LRD 先从最简单的满二叉树开始: 1.只有一个结点的满二叉树 2.有三个结点的满二叉 ...
- 给定二叉树先序、中序遍历序列,求后序遍历
给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- 已知二叉树先序和中序遍历结果,求后序遍历结果
以下面的例题为例进行讲解:已知一棵二叉树的先序遍历序列和中序遍历序列分别是ABDCEF.BDAECF,求二叉树及后序遍历序列. 分析:先序遍历序列的第一个字符为根结点.对于中序遍历,根结点在中序遍历序 ...
- 树形结构:使用栈实现,快排,先序遍历,归并排序,后序遍历
主要还是学习使用栈模拟实现递归: 总结一下,首先通过栈实现递归是有规律可行的,这里面涉及整体到部分,一切都是对象的思想,把一个整体看成一个对象,这个对象是数据和操作的集合,定义这些操作,把操作顺序按照 ...
- 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...
簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根.在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之后的屬於根的右子樹.然后, ...
- 前序中序转后序,后序中序转前序,前序后序转中序
将前序序列存入pre数组,中序序列存入in数组,后序序列存入post数组,则: 前序中序->后序 #include <cstdio> using namespace std; int ...
最新文章
- opennre 中文关系抽取_OpenNRE 2.0:可一键运行的开源关系抽取工具包
- 5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?
- 开源博客QBlog开发者视频教程:模板机制加载原理解说(三)
- debian预装环境软件的设置
- 使用bc45编译ucos-II的配置过程
- 事务连接中断_HTTP长连接和短连接
- vue 滑动置顶功能_VUE 实现滚动监听 导航栏置顶的方法_蜡烛_前端开发者
- 第一章 计算机网络 1 计网体系结构的概念和功能 [计算机网络笔记]
- 【超全教程】SpringBoot 2.3.x 分层构建 Docker 镜像实践
- 如何快速准确的识别出一个文件的具体类型
- C语言 signal
- 决策树(十三)--XGBoost参数调优完全指南
- 完整的【ArcGIS地理信息系统空间分析实验教程】(包括光盘数据)
- java运行bat_java调用bat
- 用MATLAB实现对运动物体识别与跟踪
- 安卓或苹果IOS的APP应用如何取名字?好的名字技巧?
- \t\t门萨智商测试 有些面试的公司喜欢玩这个
- VMware Workstation 虚拟机中的 虚拟机使用Windows 连接共享访问 Internet
- 查询学生 学号、姓名和平均成绩
- 信息通信与工程学院c语言试题,2020年湖南大学信息与通信工程考研真题试卷及试题答案,C语言程序设计考研试题下载...