【概述】

从树的孩子兄弟表示法和二叉树的二叉链表表示可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和右兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针。

因此,从物理结构上看,树的孩子兄弟表示法和二叉树的二叉链表是相同的,只是解释不同。

以二叉链表为媒介,可导出树与二叉树的对应关系,即给出一棵树,可以找到唯一的一棵二叉树与之对应,这样树的操作实现就可借助二叉树存储,利用二叉树上的操作来实现。

【树转二叉树】

将一棵树转为二叉树的方法是:

  1. 加线:树中所有相邻兄弟结点间加一条线
  2. 去线:对树中的每个结点,只保留他与第一个子结点的连线,删除与其他子结点的连线
  3. 层次调整:以根结点为轴心,将树顺时针旋转一定角度,使之层次分明

根据树与二叉树的转换关系以及二叉树的遍历操作可知:

  • 树的前序遍历 <----> 二叉树的前序遍历
  • 树的后序遍历 <----> 二叉树的中序遍历

【森林转二叉树】

森林是若干棵树的集合,将森林中的每棵树转为二叉树,再将每棵树的根节点视为兄弟,这样森林就转成了二叉树。

将一棵树转为二叉树的方法是:

  1. 转树:将森林中的每棵树转换成二叉树
  2. 连接:从第二棵树二叉树开始,依次将后一棵二叉树的根节点作为前一棵二叉树根结点的右孩子

【二叉树转树或森林】

树和森林都能转成二叉树,二者的不同是树转成的二叉树其根结点无右子树,森林转成的二叉树其根结点有右子树。

显然,这一转换过程是可逆的,即根据二叉树的根结点有无右子树,将其还原成树或森林。

将一棵二叉树转成树或森林的方法是:

  1. 加线:若某结点 x 是其双亲 y 的左孩子,则把结点 x 的右孩子、右孩子的右孩子、……,都与结点 y 用线连起来
  2. 去线:删去原二叉树中所有的双亲结点与右孩子结点的连线
  3. 层次调整:整理 1、2 步得到的树或森林,使之层次分明

【森林的遍历】

森林有两种遍历方法:

  • 前序遍历:前序遍历森林中的每一棵树
  • 后序遍历:后序遍历森林中的每一棵树

理论基础 —— 二叉树 —— 树、森林、二叉树的转换相关推荐

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

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

  2. 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

    树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树.二叉树的相关定义如下: typedef int DataType; typedef struct Node{DataTyp ...

  3. 树 森林 二叉树 遍历

    所谓遍历(Traversal),是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问. 访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值.更新节点的值等. 不同的遍历 ...

  4. 数据结构—树与二叉树

    总第119篇 前言 之前谈到的线性表.栈和队列都是一对一的数据结构,但是现实中也存在很多一对多的数据结构,这篇要写的就是一种一对多的数据结构---树.全文分为如下几部分: 树的一些基本概念 树的存储结 ...

  5. 数据结构复习(五)——树和二叉树

    一.二叉树 1. 二叉树的顺序存储 #include<stdio.h> #define MaxSize 10 struct TreeNode {ElemType value; //结点中的 ...

  6. 408数据结构考研笔记——第五章树与二叉树(重点)

    目录 一.基本概念 1.定义 2.基本术语 3.性质(重点!!) 二.二叉树 1.定义 2.特殊二叉树 1.满二叉树 2.完全二叉树 3.二叉排序树 4.平衡二叉树 3.性质 4.存储结构 1.顺序存 ...

  7. 数据结构-树与二叉树-思维导图+小结

    数据结构-树与二叉树-思维导图 1 数据结构-第五章-树与二叉树-思维导图 2 思维导图-补充 3 小结 3.1 知识点小结 3.2 习题小结 1 数据结构-第五章-树与二叉树-思维导图   数据结构 ...

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

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

  9. 树、二叉树和森林的转换

    目录 1.树转为二叉树 2.森林转为二叉树 ​3.二叉树转为树和森林 网上的方法大多只讲具体的步骤,这样的确能够把题目做出来.但我们若能抓住其转换核心思想,则可以淡化具体操作,面对任何形式的树,都可以 ...

最新文章

  1. inline-block空隙怎么解决
  2. Keil错误Unable to automatically place AT section malloc.o(.ARM.__AT_0x20000000) with required base add
  3. React 中 $$typeof 的作用
  4. 计算机cpu温度显示原理图,腾讯计算机管家关于如何检查CPU温度的图形教程
  5. java 0 255_java – 什么(float)(par4 16255)/ 255.0F;意思?
  6. 对于一个html元素,有几种方法修改样式方法的优先级,HTMLCSS常见面试题及疑难解答...
  7. java获取access token_【Java示例】如何获取AccessToken
  8. Android获取网页源代码
  9. linux端口扫描脚本ip段,shell脚本结合iptables防端口扫描的实现
  10. 《统计学习方法》读书笔记
  11. 好看的android动画效果
  12. qt在linux下编译资源文件,linux下Qt qrc文件的编写与应用
  13. 笔记5:QQ群聊天机器人
  14. flash cs3下停止movieClip的播放
  15. 生肖android编程,android小程序,根据生日年份计算出生肖
  16. IntelliJ IDEA 之 设置项目编码
  17. vc 调用matlab figure 画图
  18. 深度学习-11:神经元、神经网络、人脑和卷积神网络
  19. 从零开始对接微信支付(H5、JSAPI、小程序)
  20. 计算机音乐谱安娜的橱窗,《安娜的橱窗,钢琴谱》2,封茗囧菌(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...

热门文章

  1. 面试官:为什么要尽量避免使用 IN 和 NOT IN?大部分人都会答错!
  2. 阿里第二代微服务强势崛起,你还敢往简历上写“精通”吗?
  3. 阿里Java面试答案【283页PDF文档免费领】
  4. 天才程序员的传奇人生:项目被总统抢走,在瞄准镜下写完代码后被捕入狱
  5. eclipse中为了format的代码更加好看,少换行,可以设置java、xml、jsp的代码line width。
  6. oracle简单对象类型
  7. Linux系统:Centos7下搭建PostgreSQL关系型数据库
  8. Java B2B2C多用户电子商务平台SpringCloud/Boot
  9. linux系统配置免密登录
  10. “数据门”事件频发如何避免人为因素导致数据泄露?