树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;

二叉树

二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。

森林

如果不考虑连通性,允许图中有多个连通分量,若是二叉树,则这样的结构叫做森林。

树变二叉树

树变二叉树的规则:每个结点的左指针指向它的第一个孩子结点。右指针指向它在树中的相邻兄弟结点。 
也即:左孩子右兄弟。 
根没有兄弟,所以转换以后的树没有右子树。

具体操作:

在兄弟之间连线
对每一个结点,只保持它与第一个子结点(长子)的连线,与其他子结点的连线全部抹去。
以树根为轴心,顺时针旋转45度。

二叉树变树
二叉树变树的规则:是树变二叉树的逆过程。问:二叉树可以变成各种各样的树,为何这里只是唯一一种树形?这里只是假设这个二叉树是由上面的变换算法得来,那么过程可逆。所以对于有右子树的二叉树树形,是不能用这种办法化为树的。

加线。如果某个结点有左孩子,那么把这个左孩子的右孩子,右孩子的右孩子,一直右下去,全部连接到这个结点。这个对应树变二叉树算法中的抹掉与长子以外的结点的连线,现在要找回自己的全部儿子。
去线。删除树中所有结点与这些右孩子的连线。找回了自己的儿子,不容许别人还和它们有瓜葛。
层次调整。

二叉树变森林
规则:

递归出口:若二叉树非空,则二叉树根及其左子树作为第一棵树的二叉树形式。
递归:操作二叉树的右子树。即拿掉一棵树后,再对剩下的二叉树部分进行同样的操作,直到无右子树为止。
砍成一堆二叉树后,还得注意并没结束,重点不是二叉树,而是树,因此用上面的二叉树化树的算法化成森林。

森林变二叉树
这个规则是:

先将每一棵树化为二叉树
第一棵树的根作为转换后的二叉树的根
第一棵树的左子树作为转换后的二叉树的根的左子树
第二棵树作为二叉树的右子树
第三棵树作为二叉树右子树的右子树

这里主要运用的点是:转换为二叉树后,这个二叉树没有右子树,因此腾出右手可以接一棵新的树,因此这样可以连接很多由树化来的二叉树。

对照这个算法去想二叉树变森林,就很容易明白,先砍掉根和它的左子树作为一个整体,再对剩下的部分同样操作。

Mr.J--树、二叉树、森林的转换相关推荐

  1. 树与森林的存储、遍历和树与森林的转换

    树的存储结构 双亲表示法 孩子表示法: (a)多重链表(链表中每个指针指向一棵子树的根结点); (b)把每个跟结点的孩子结点排列起来,看成一个线性表,且以单链表做存储结构.且N个头指针也组成一个线性表 ...

  2. 树/二叉树/森林之间的相互转换 与遍历

    森林就是多棵树的集合,但是森林也可以只有一棵树,二叉树是一种特殊的树,固定的度为2,这是基本前情提要- 树常见的存储方式有三种: (1)双亲表示法 仅用定义一个结点对象,一个数组,代码定义如下: ty ...

  3. 树,森林,二叉树的互相转换

    树.森林到二叉树的转换 将树转换为二叉树 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟.按照这种关系很自然地就将树转换成相应的二叉树: 在所有兄弟结点之间加一连线 对每个结点,除了保留 ...

  4. 树,森林与二叉树之间的转换

    1.树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号. 将树转换成二叉树的步骤是: (1)加线.就是在所有兄弟结点之间加一条连线: ...

  5. 数据结构——树、森林和二叉树之间的转换

    摘自大佬博客http://www.cnblogs.com/zhuyf87/archive/2012/11/04/2753950.html 树转换为二叉树 (1)加线.在所有兄弟结点之间加一条连线. ( ...

  6. 数据结构-----二叉树,树,森林之间的转换

    图片和转换步骤来自这里 本文主要描述具体实现 用一种略微老土的话描述: 二叉树:每一节点最多有2个子节点,左边的叫左节点,右边的叫右节点,自己叫根节点. 树:每个节点的子节点数量不受限制. 森林:由若 ...

  7. (转载)树、森林与二叉树的转换

    传送门 树.森林与二叉树的转换 1.树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号. 将树转换成二叉树的步骤是: 加线.就是在所 ...

  8. 树,森林,二叉树之间的转换

    树.森林和二叉树的转换 树转换为二叉树 (1)加线.在所有兄弟结点之间加一条连线. (2)去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线. (3)层次调整.以树的 ...

  9. 6.4.1-6.4.2树、森林、二叉树的转换

    树转换成二叉树: 1.在树中所有的兄弟结点之间加一连线. 2.对每个结点,除了保留与其长子的连线外,去掉该结点的其他孩子连线. 如下图所示: 下面是森林转化二叉树: 1.先将森林中的每棵树变为二叉树. ...

  10. 理论基础 —— 二叉树 —— 树、森林、二叉树的转换

    [概述] 从树的孩子兄弟表示法和二叉树的二叉链表表示可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和右兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针. 因此,从物理结 ...

最新文章

  1. 《Imperfect C++中文版》——2.1 对象生命周期
  2. python视频课程推荐-《Python从小白到大牛》全集视频课程介绍
  3. mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步
  4. wampserver下修改mysql root用户的登录密码
  5. SqlServer获取数据表字段自定义编号
  6. 【语音去噪】基于matlab GUI FIR窗函数音频去噪【含Matlab源码 875期】
  7. fast-DTW算法
  8. clonecd中文破解版|clonecdv光盘复制工具5.5.1.4绿色免费版下载
  9. 影视后期PR效果窗口
  10. win10系统CUDA10.0安装教程(for tensorflow2.0)
  11. android 系统重新安装,一招学会安卓手机系统重装教程
  12. 电脑ie怎么设置html5,电脑中IE浏览器工具栏设置选项显示的是英文如何改成中文...
  13. DNA pull-down 要点
  14. Dev-C++ 的下载、安装和配置
  15. KVM 虚拟化 介绍
  16. php 文件图片上传
  17. 计算机往届生考研失败找工作,往届生考研心路:更多坎坷 更多回忆
  18. html语言制作简单计算器,HTML自制计算器
  19. windows xp下如何安装SQL server2000企业版
  20. Android SDK 离线包安装

热门文章

  1. iPhone Xs发布会其实是苹果计算机视觉技术发布会!
  2. ResNet被全面超越了,是Transformer干的:轻量版优于MobileNet
  3. MIT“35岁以下科技创新35人”榜单揭晓
  4. 自动生成代码:TensorFlow官方工具TF-Coder已开源
  5. VScode Remote 远程开发与调试(转)
  6. 曲率多项式转换为直角坐标系
  7. c if sortable html,sortable.js中文文档
  8. python100天从新手到大师 pdf_Python100天从新手到大师(Python100Days)
  9. 对于网络爬虫的提问?
  10. 安装scws需要安装php吗,Linux 安装SCWS-1.2.3 安装说明(包括php扩展)