树和森林,各种树之间的转化
树:
树是n个结点的有限集。若n=0,称为空树;
若n>0:有且仅有一个特定的称为根的结点。其余结点可分为m(m>=0)个互不相交的有限集
森林:
是m(m>=0)课互不相交的树的集合
树的存储结构:
双亲表示法(找双亲容易,找孩子难)
实现 : 定义结构数组
存放树的结点,每个结点含两个域:
- 数据域:存放结点本身信息
- 双亲域 :指示本结点的双亲结点在数组中的位置
树的存储结构:
typedf struct PTNode{
TEleType data;
int parent;//双亲位置域
}PTNode;
树结构:
#define MAX_TREE_SIZE 100
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int r,n;//根节点的位置和结点个数
}PTree;
孩子链表(找孩子容易,找双亲难):
把每个结点的孩子结点排序起来,看成一个线性表,用单练表存储,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,用顺序表(含n个元素的结构数组)存储。
孩子结点类型:
typedf struct CTNode{
int child;
struct CTNode *next;
}*ChildPtr;
双亲结点类型:
typedef struct{
TElemType data;
ChildPtr fristchild;//孩子链表头指针
}CTBox;
树结构:
typedef struct{
CTBox nodes[MAX_TREE_SIZE];
int n,r//结点数和根节点的位置
}CTree;
孩子兄弟表示法(二叉树表示法):
实现:用二叉链表做树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点。
结构:
typedef struct CSNode{
ELemType data;
struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;
树与二叉树的转换:
- 将树转化为二叉树进行处理,利用二叉树的算法来实现对树的操作。
- 由于树和二叉树都可以用二叉链表做存储结构,则以二叉链表作为媒介可以导出树与二叉树之间的一个对应关系。
方法:
兄弟之间加一连线
- 对每个结点,除了其左孩子外,去除其与其余孩子之间的关系
- 以树的根结点为轴心,顺时针转45°
森林与二叉树的转化:
- 将每棵树分别转换成二叉树
- 将每棵树的根节点用线相连
- 以第一颗树根节点为二叉树的根,再以根节点为轴心,顺时针旋转,构成二叉树型结构
树与森林的遍历:
树的遍历:
- 先根遍历:若树不空,先访问根节点,然后依次先根遍历各课子树
- 后跟遍历:若树不空,先一次后根遍历各课子树,然后访问根节点
- 层次遍历:则自上而下自左至右访问树中每个结点。
森林的遍历:
将森林看作三部分构成:
- 森林中第一棵树的根节点;
- 森林中第一棵树的子树森林
- 森林中其他树构成的森林
先序遍历:
- 访问森林中第一棵树的根节点
- 先序遍历森林中第一棵树的子树森林
- 先序遍历森林中(除第一棵树之外)其余树构成的森林
树和森林,各种树之间的转化相关推荐
- 数据结构——树、森林和二叉树之间的转换
摘自大佬博客http://www.cnblogs.com/zhuyf87/archive/2012/11/04/2753950.html 树转换为二叉树 (1)加线.在所有兄弟结点之间加一条连线. ( ...
- [数据结构]树、森林与二叉树之间的相互转换方法
树.二叉树与森林的相互转换 本文只给出树.森林与二叉树之间的转换方法,而详细的证明过程不在本文讨论范围之内. 树 → 二叉树 在所有兄弟结点之间加一连线. 对每个结点,除了保留与其长子的连线外,去掉该 ...
- 树、森林和二叉树之间的转换
2019独角兽企业重金招聘Python工程师标准>>> 1.树转化为二叉树 2.森林转化为二叉树 3.二叉树转化为树 4.二叉树转化为森林 5.树和森林的遍历 转载于:https:/ ...
- 树,森林与二叉树之间的转换
1.树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号. 将树转换成二叉树的步骤是: (1)加线.就是在所有兄弟结点之间加一条连线: ...
- 《数据结构与算法》(十一)- 树、森林与二叉树的转换及哈夫曼树详解
目录 前言 1. 树.森林与二叉树之间的转换 1.1 树转换为二叉树 1.2. 森林转换为二叉树 1.3. 二叉树转换为树 1.4 二叉树转换为森林 1.5 树与森林的遍历 2. 哈夫曼树及其应用 2 ...
- 树和森林(森林的部分已经看不懂了)
树和二叉树 树的概念: 结构特点:有且仅有一个根节点无前驱,有一个或多个叶节点无后继 其余结点有唯一前驱和若干后继 递归描述:空是树,不空时,树由唯一根节点和若干子树组成, 每个子树满足树的定义 in ...
- 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林
虽然今天不是植树节,但是我今天想种树. 文章目录 树,什么是树? 二叉树 定义 二叉树的创建 二叉树的前中后序遍历 前序遍历: 中序遍历 后序遍历 已知前序.中序遍历结果,还原二叉树 已知后序.中序遍 ...
- 数据结构之树、森林、二叉树的转化
树.森林.二叉树的转化 树转化成二叉树: 二叉树转化成树: 森林转化成二叉树: 二叉树转化成森林: 树转化成二叉树: 转化规则: 转化前: 转化后: 即: 二叉树转化成树: 原理: 树转二叉树的逆过程 ...
- 树/二叉树/森林之间的相互转换 与遍历
森林就是多棵树的集合,但是森林也可以只有一棵树,二叉树是一种特殊的树,固定的度为2,这是基本前情提要- 树常见的存储方式有三种: (1)双亲表示法 仅用定义一个结点对象,一个数组,代码定义如下: ty ...
最新文章
- 藤摇椅游戏道具制作全流程讲解视频教程
- Hadoop 2.0 Yarn代码:心跳驱动服务分析
- python3菜鸟教程-Python3 循环语句
- C#枚举硬件设备(升级版)
- opencv三维重建_基于OpenCV和C++的多视图三维重建
- 转tigase 安装
- Factors 分解质因数
- w ndows 高级索引,软媒原创:为Windows7建立索引,搜索文件更给力
- Redis学习---(13)Redis 发布订阅
- HighCharts控制不显示“上下文菜单”
- java分页插件使用_MyBatis-Plus之分页插件使用
- springdata jpa in查询
- 如何在企业微信中使用微搭低代码
- 面试必看:java面试考点精讲视频教程
- 技术人员如何创业:打造超强执行力团队
- 文本框导入图片并显示到页面上
- 修复WIN10下Prolific USB-to-Serial Comm Port驱动无法使用
- 禅意花园网页设计_CSS教程:15.1 “禅意花园”页面HTML结构分析
- 即插即用——移动硬盘安装Ubuntu20.04
- Matlab基本的数字基带信号APP界面(GUI入门)