问题描述

听课到树的遍历,当其与二叉树的遍历联系起来时,一个问题困惑着我:为什么树的后根遍历对应的是二叉树的中序遍历?我的思考如下:

树与二叉树

定义不多讲,这里再介绍以下普通树与二叉树之间的转换(其实就是孩子兄弟表示法),注意理解转换时的特性:

转换成二叉树:

  • 左子树是孩子
  • 右子树是兄弟
  • 左边到右边的过程即是树->二叉树的转化
  • 右边到左边的过程即是二叉树->树的转化
  • 注意观察到几个特性:
    • 指定结点若有孩子,对应的在二叉树中也一定有孩子,且一定在该结点左子树的右臂上,且其左子树的根结点一定为指定结点最左边的孩子。(臂:如图中的结点B、C、D组成的整体,这里我把它称为右臂)
    • 指定结点若有兄弟结点,对应的在二叉树中一定是在该结点所在的右臂上
    • 树(子树)的左臂对应的在二叉树上左臂不动
//树的存储孩子 兄弟表示法
typedef struct CSNode{ElemType data;    //数据域struct CSNode *firstchild, *nextsibling;   //第一个孩子和右兄弟指针
}CSNode, *CSTree;

树的遍历

先根遍历:若树非空,先访问根结点,再依次(从左至右)对每棵子树进行先根遍历。
后根遍历:若树非空,先依次(从左至右)对每棵子树进行后根遍历,最后再访问根结点。

思考:树的遍历与二叉树遍历之间的联系

看以下例子即可发现树的遍历二叉树遍历联系和区别


前者为普通树:

  • 先根遍历为:DHIJ
  • 不可能有中序。(和二叉树只有两个子树不同,普通的树可能有三甚至更多个子树,何谈中序之说)
  • 后根遍历:HIJD

后者为二叉树:

  • 先序遍历为:DHIJ(对应先根遍历)
  • 中序遍历为:HIJD(对应后根遍历)
  • 后序遍历为:JIHD

深入理解,有两个问题:

1、为什么二叉树后序遍历没有对应树的某种遍历方式呢?

因为二叉树的先序遍历和中序遍历都有一个很重要的先后顺序,是后序遍历没有的:访问根结点一定在访问右子树之前!也就是说,对于一个右臂来说,它上面结点被访问的顺序一定是由浅入深的(例:H I J)!对应的在普通树中,就是一定是从左至右的访问每个子树,这至关重要,因为这是先根、后根遍历所规定的。但后序遍历这个顺序是反着的,也就是对应到普通树中,是从右至左的访问每个子树,显然不符合要求。

2、接上问思考,访问根结点、左子树的顺序有要求吗(这也是区分先序和中序遍历的关键)?

答案是没有。这个顺序可以理解成到底是让左子树的头头(左孩子,右臂最上面的结点)看根结点的屁股,还是让根结点看左子树尾巴(右臂最下面的结点)的屁股。因为先序遍历,根结点的后继一定是它的左孩子(右臂最上面的结点);中序遍历,根结点的前驱一定是左子树右臂最下面的那个结点。那么对应到树的遍历,先根、后根的问题不就是让根结点跟在它的孩子们前面还是后面的问题嘛。而我们所谓的右臂,正是根结点的孩子们啊。树的遍历与二叉树遍历对应的关系也就知道了。

3、其他

由此,还有一个可能很重要的发现:先、中、后序遍历中,我们规定,一定是先访问左子树再访问右子树,那么也就是说对于同一个根结点的两棵树,左子树上结点的前驱一定不会在右子树上,右子树上结点的后继一定不会在左子树上

如有错误欢迎评论区指正。

对树的遍历和二叉树遍历之间的关系的理解相关推荐

  1. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  2. 树(二)——二叉树遍历

    目录  二叉树的遍历 一.二叉树的遍历 二.二叉树遍历的递归 1.两个例子便于理解三种遍历方式: 2.二叉树遍历的递归实现 三.二叉树遍历的非递归 1.二叉树遍历的非递归 2.三种遍历方式的非递归实现 ...

  3. 二叉树 二叉树遍历 通过二叉树遍历求得二叉树

    什么是二叉树 二叉树(Binary tree)是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因 ...

  4. mysql如何二叉树遍历_二叉树遍历

    二叉树的遍历方式分别为:前序遍历.中序遍历.后序遍历. 前序遍历: 先访问根节点,再访问左节点,最后访问右节点 中序遍历: 先访问左节点,再访问根节点,最后访问右节点 后序遍历: 先访问左节点,再访问 ...

  5. IP地址与DNS之间的关系——真正理解DNS

    1.IP地址 容易理解而又不太准确的说,IP地址是电脑在网络中的唯一标识,局域网IP是限于局域网内可以相互访问的电脑:公网中的固定IP,可以说是电脑在公网网络中的唯一标识. 2.DNS(Domain ...

  6. (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序)

    文章目录 一:二叉树遍历概述 二:二叉树深度优先遍历 (1)先序遍历-根左右(NLR) (2)中序遍历-左根右(LNR) (3)后序遍历-左右根(LRN) 总结:三种遍历方式动图演示 三:二叉树的层序 ...

  7. 【数据结构】二叉树遍历图解

    二叉树遍历 简介: 本文主要涉及二叉树的先中后序列遍历 文章并未涉及代码,仅仅提供思路 reference: 学堂在线-数据结构 引言: 在学习链表和数组这两种线性的数据结构的时候,元素之间的次序是十 ...

  8. html与css与php的关系,HTML、PHP、CSS、JS之间的关系

    23:02:06 2019-08-05 自己要搭建网站 虽然可以下载大佬的界面 但至少要懂一点web开发的知识 我现在感觉像个憨憨 啥都不明白 HTML负责放你需要显示的内容, 而PHP可以输出可变化 ...

  9. 面向对象的基本概念(二)--UML.类之间的关系

    8.接口和类继承 (1)接口中不能有非抽象方法,但抽象类中可以有. (2)一个类能实现多个接口,但只能有一个父类. ( 3)接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口. ...

最新文章

  1. Java提高篇——Java 异常处理
  2. 如何把一个java程序打包成exe文件,运行在没有java虚
  3. 提高生产力,最全 MyBatisPlus 讲解!
  4. 登录计算机怎么保存用户名,浏览器保存了账号密码怎么查看,教您怎么查看
  5. 从零开始学PowerShell(6)获取对象信息
  6. kingbase自带的驱动在哪_为什么别人家的广告语都能自带BUG?
  7. 【Level 08】U07 Mixed Feelings L3 I just want to have fun
  8. Your Potential. Our Passion
  9. iss版本服务器读取_【IIS7服务器管理工具下载】IIS7服务器管理 v2.1.9 官方版-开心电玩...
  10. m3u8在线播放工具 以及 开源播放方案
  11. 【NeurIPS 2019】Yoshua Bengio报告:深度学习系统从1代到2代中的基础知识
  12. 使用Service Worker发送Push推送
  13. 安卓图片轮播(banner)
  14. linux 网络管理 pdf,Windows与Linux网络管理与维护 PDF扫描版[194MB]
  15. ubuntu GRUB 引导加载 Beini(WiFi破解神器) Tiny Core Linux
  16. 群晖NAS 7.X版搭建博客网站,并内网穿透发布公网可访问 4-8
  17. 信息安全系统设计基础期中总结
  18. Telegraf 简单使用介绍
  19. Linux动物乐园 Ubuntu版本代号赏析
  20. su域名是什么?su域名的历程是怎样的?

热门文章

  1. 关于word的那些事
  2. __attribute__((weak))介绍以及用法
  3. Flash Player渲染模型(显示列表)
  4. 散列算法进行数据验证与加密
  5. Oracle 系统权限分类
  6. i5-8250U 宏碁swift3_【黑苹果】宏基Acer Swift 3(SF315-51-518S)+i5-8250U+macos 10.15 efi文件下载!...
  7. # 什么是Tproxy透明代理
  8. 2022年3月电子学会Python等级考试试卷(四级)答案解析
  9. ERROR: Received close_notify during handshake
  10. 对XX网站的数据采集