树、二叉树与森林的相互转换

本文只给出树、森林与二叉树之间的转换方法,而详细的证明过程不在本文讨论范围之内。

树 → 二叉树

在所有兄弟结点之间加一连线。
对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。

二叉树 → 树

是树转换为二叉树的逆过程。

加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点…,都作为结点X的孩子。将结点X与这些右孩子结点用线连接起来。
去线。删除原二叉树中所有结点与其右孩子结点的连线。

森林 → 二叉树

将森林中的每棵树变为二叉树;

因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。

二叉树 → 森林

假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。

从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…。直到所有这些根节点与右孩子的连线都删除为止。
将每棵分离后的二叉树转换为树。

[数据结构]树、森林与二叉树之间的相互转换方法相关推荐

  1. python print rdd_spark: RDD与DataFrame之间的相互转换方法

    DataFrame是一个组织成命名列的数据集.它在概念上等同于关系数据库中的表或R/Python中的数据框架,但其经过了优化.DataFrames可以从各种各样的源构建,例如:结构化数据文件,Hive ...

  2. 广义表与二叉树之间的相互转换

    广义表与二叉树之间的相互转换 二叉树是树形结构中一种特殊的树,其特点是每个结点最多只有两个孩子结点.二叉树除了可以通过典型的树状图来表示外,还可以使用广义表进行表示,例如:A(B,C)表示根结点A的左 ...

  3. spark与python关系_spark: RDD与DataFrame之间的相互转换方法

    DataFrame是一个组织成命名列的数据集.它在概念上等同于关系数据库中的表或R/Python中的数据框架,但其经过了优化.DataFrames可以从各种各样的源构建,例如:结构化数据文件,Hive ...

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

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

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

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

  6. 树、森林和二叉树之间的转换

    2019独角兽企业重金招聘Python工程师标准>>> 1.树转化为二叉树 2.森林转化为二叉树 3.二叉树转化为树 4.二叉树转化为森林 5.树和森林的遍历 转载于:https:/ ...

  7. 树与二叉树之间的相互转换、树的遍历

    树与二叉树的转换.树的遍历 树和二叉树不同,可以有0到n个孩子,所以实现起来很麻烦,但我们可以借助树的孩子兄弟表示法把树转换成二叉树. 在孩子兄弟表示法中,某个结点的第一个孩子结点的指针是二叉树中其左 ...

  8. 【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)

    一.二叉树的定义及其主要特征 1.1 二叉树的概念 二叉树是另一种树形结构,其特点是每个结点最多含两棵子树(也就是说,二叉树的度≤2). 二叉树是一种有序树,若将其左.右子树颠倒,则成为另一颗不同的二 ...

  9. 数据结构之森林转换二叉树

    题目描述 给定一组森林,编写程序生成对应的二叉树,输出这颗二叉树叶结点对应的二进制编码.规定二叉树的左边由0表示,二叉树的右边由1表示. 输入 输入: N B 表示N个树,每结点最多B个分支 第2行至 ...

最新文章

  1. 【js】内置对象String的常用方法
  2. 马斯克:我有一个大胆的想法!给红绿灯加个AI视觉「外挂」
  3. [云炬创业基础笔记]第五章创业机会评估测试1
  4. ClickHouse分布式集群部署
  5. [力扣]1018_可被5整除的二进制前缀
  6. 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)
  7. 最小二乘法拟合多项式原理以及c++实现
  8. 《设计模式解析》第1章 面向对象范型
  9. PMP考试的难度怎么样?
  10. python有趣的简单代码-盘点10个一行强大的、有趣的Python源代码
  11. 智能城市dqn算法交通信号灯调度_智能交通信号灯防堵塞控制系统的制作方法
  12. POI导出Excel设置单元格格式
  13. 近视眼手术之后计算机专业,做完近视激光手术后多久可以整天对着电脑工作。应注意什么?...
  14. 大猩猩优化算法(Matlab代码实现)
  15. 浏览器拉起APP(深度链接)——scheme方法
  16. 查看电脑使用了多长时间
  17. PHP反弹shell
  18. 深度学习框架PyTorch入门与实践:第八章 AI艺术家:神经网络风格迁移
  19. C++课件知识点整理
  20. Materialise Magics 22.0软件的安装

热门文章

  1. 中标麒麟linux卸载qt,国产化 银河麒麟编译Qt程序的问题汇总 | 阿拉灯
  2. 【C#程序设计】教学讲义——第三章:C#语言基础
  3. 剑指offer之用链表实现栈(带头节点)
  4. java和C++之单例类双重检查加锁
  5. Tree前序反序列化
  6. java exception 行号_java日志记录错误的文件_方法_行号_报错信息
  7. 堪称经典!这部由苏联最杰出数学家编写的数学教材,为何能大受推崇?
  8. 数理思维这样培养才有效,从小就赢在方法上,每本不足3元!!
  9. 最全知识点总结!| 大数据学习路线指南
  10. 你以为妹子穿短裙真的是为了诱惑你吗?