树与二叉树的转换、树的遍历

树和二叉树不同,可以有0到n个孩子,所以实现起来很麻烦,但我们可以借助树的孩子兄弟表示法把树转换成二叉树。

在孩子兄弟表示法中,某个结点的第一个孩子结点的指针是二叉树中其左孩子结点指针,右兄弟结点指针是二叉树中右孩子结点指针。

树转换为二叉树过程:

(1)树中所有相同双亲结点的兄弟结点之间加一条连线;

(2)对树中不是双亲结点的第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线;

(3)整理所有保留的连线,根据连线摆放成二叉树的结构,转换完成。

二叉树还原为树过程:

(1)若某结点是其双亲结点的左孩子,则把该结点的右孩子,右孩子的右孩子······都与该结点的双亲结点用线连起来;

(2)删除原二叉树中所有双亲结点与右孩子结点的连线;

(3)整理所有保留的连线,根据连线摆放成树的结构,转换完成。

树的遍历:

主要有先根遍历和后根遍历两种,先根遍历序列一定和该树转换的二叉树的前序遍历序列相同;后根遍历序列一定和该树转换的二叉树的中序遍历序列相同。

先根遍历过程:

(1)访问根结点;

(2)按照从左到右的次序先根遍历根结点的每一棵树。

后根遍历过程:

(1)按照从左到右的次序后根遍历根结点的每一棵子树;

(2)访问根结点。

图中先根遍历序列为:ABEJFCGKLDHI 后根遍历序列为:JEFBKLGCHIDA

树与二叉树之间的相互转换、树的遍历相关推荐

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

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

  2. 树、二叉树、AVL树,B树基础学习

    树.二叉树.AVL树,B树基础学习 一.树的基本概念 树是一种数据结构,它是由n(n>1)个有限节点组成的一个具有层次关系的集合. 树的基本概念 1.双亲:若有一个结点有子树,那么该结点就称为子 ...

  3. Python数据结构与算法笔记(八):数据结构——树,二叉树和AVL树

    树 class Node:def __init__(self, name, type='dir'):self.name = nameself.type = type #"dir" ...

  4. (三叉字典树)二叉树套字典树

    看了道题,是要写个字典树排序的,但又不局限于二十六个字母,于是来了个三叉字典树(二叉树套字典树).最差时间复杂度是trie树的常数倍,空间比trie树省得多了. #include<cstdio& ...

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

    树.二叉树与森林的相互转换 本文只给出树.森林与二叉树之间的转换方法,而详细的证明过程不在本文讨论范围之内. 树 → 二叉树 在所有兄弟结点之间加一连线. 对每个结点,除了保留与其长子的连线外,去掉该 ...

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

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

  7. 树以及二叉树的常用性质以及遍历

    度 一个节点有几个度,就是看这个节点有几个分支,如A节点的度为2,B节点的度为1,而D节点的度为3. 树的度 树的度为这个树所有有最大的度的那个节点的度,例如在上图中,树的度为3(取决于D节点的度). ...

  8. python数据结构树和二叉树,python数据结构树和二叉树简介

    一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树. 树的递归定义: 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树 ...

  9. 树与二叉树 | 实验3:由遍历序列构造二叉树

    实验3:由遍历序列构造二叉树 二叉树构造定理: 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定. 定理7.2:任何n(n>0)个不同结点的二又树,都 ...

最新文章

  1. 服务器跑python程序_远程编写+调试服务器上的Python程序
  2. Rust语言——无虚拟机、无垃圾收集器、无运行时、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争...
  3. 好好学python·运算符和流程控制
  4. MySQL条件查询介绍
  5. C#连接MySQL数据库实例
  6. 浅谈工业无线遥控器的基本定义及原理
  7. C++ opengl 绘制三角形带
  8. Linux下的wc命令
  9. QT解析嵌套JSON表达式
  10. Ansible详解(十四)——Ansible Role实战
  11. 【ArcGIS|空间分析】地形特征相关计算
  12. Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定...
  13. C语言 素数三种思路求解,C语言求素数
  14. 2021暑期实习:网易互娱游戏测试最新面经!
  15. html有哪些段落及排版标记,04.HTML排版标记
  16. numpy.take()用法总结
  17. 硬盘SMART检测参数详解[转]
  18. EDG获得S11冠军
  19. 美女图片采集器 源码+解析
  20. 频率单位转换 hz cpd cph

热门文章

  1. 什么是pdb,idb文件,.clw文件、.ncb文件和.aps文件
  2. Selenium---八大定位方法,三种等待方式
  3. 新标准日本语初级 第一课
  4. npm难以安装包的解决方法
  5. [ 绘画教程 ] 学会怎么利用形状概括画面
  6. gridlab-d教程
  7. 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 (转)
  8. 领导者批评下属的16个常用套路,学会了,你骂的越狠下属越高兴
  9. Diameter协议格式符号的含义
  10. Oracle 的 SQL语句中如何处理‘’等特殊符号