理论基础 —— 树 —— 树的存储结构
【父亲表示法】
由于树中每个结点均有且仅有一个父结点,那么根据这一特性,用一维数组来存储树的各个结点(一般按层序存储),数组中的一个元素对应树中的一个结点,每个结点记录两类信息:结点的数据信息、该结点的父亲在数组中的下标
优缺点:利用了树中除根结点外每个结点都有唯一的父结点这个性质,很容易找到树根,但找孩子时需要遍历整个线性表
template<class T>
struct Node{T data;//数据域,存放该结点的数据信息int parent;//指针域,指向该结点的父结点
}tree[N];
【孩子表示法】
树的孩子表示法是基于链表的存储方法,其缺陷是只能从父结点遍历到子结点,不能从某个子结点返回到它的父结点,有两种形式:
1.多重链表表示法
由于树中的每个结点都可能有多个孩子,因此链表中的每个结点都包含一个数据域与多个指针域,每个指针域指向该结点的一个孩子结点。
由于树中各节点的度不同,因此指针域的设置有两种方法:
- 指针域的个数等于该结点的度:节省空间但各种操作不易实现,适用于各节点的度相差较大、操作较少的情况
- 指针域的个数等于树的度:浪费空间但各种操作容易实现,适用于各节点的度相差不大、操作较多的情况
//指针域的个数等于该结点的度
template<class T>
struct Node{T data;//数据域,存放数据信息int degree;//度域,存放该结点的度int child[degree];//指针域,child[i]指向该结点的第i个孩子
}tree[N];//指针域的个数等于树的度
template<class T>
int num;//num为树的度
struct Node{T data;//数据域,存放数据信息int child[num];//指针域,child[i]指向该结点的第i个孩子
}tree[N];
2.孩子链表表示法
用多个单链表来表示树,将每个结点的孩子结点进行排列,看成一个线性表,并以单链表存储,称为该结点的孩子链表。
那么,n 个结点共有 n 个孩子链表,其中叶结点的孩子链表为空,即 n 个单链表共有 n 个头指针,这 n 个头指针又组成了一个线性表,将这存放 n 个头指针的数组和存放 n 个结点的数组结合起来,构成孩子链表的表头数组
struct childNode{//孩子结点int child;childNode *next;
};
template<class T>
struct tableNode{//表头结点T data;childNode *firstChild;
};
【父亲孩子表示法】
父亲孩子表示法是父亲表示法、孩子链表表示法的结合。
父亲孩子表示法仍将各结点的孩子分别组成单链表,同时用一维数组顺序存储树中的各节点,数组元素除了包括结点的数据信息和该结点的孩子链表的头指针外,还增设一指针域用于该结点的父结点在数组中的下标。
template<class T>
struct Node{T data;//数据域,存放数据信息Node<T> *child[m];//指针域,指向若干孩子结点Node<T> *father;//指针域,指向父亲结点
};
【孩子兄弟表示法】
孩子兄弟表示法又称二叉链表表示法,是一种双链表结构,其链表中的每个结点除数据域外,还设置了两个指针分别指向该结点的第一个孩子和右兄弟。
template <class T>
struct Node{T data;//数据域,存放数据信息Node<T> *firstChild;//指针域,存放该结点第一个孩子结点的地址Node<T> *rightBrother;//指针域,存放该结点的右兄弟的地址
};
理论基础 —— 树 —— 树的存储结构相关推荐
- 二叉树存储结构 mysql_为什么mysql索引选择b+树作为底层存储结构?
这篇文章解决一个问题mysql 底层为什么是用b+树作为存储结构?为什么不是二叉树,红黑树,b树? 我们先构造一个应用场景,我们有1kw的数据需要存储在一张表里面,那么我们怎么设计能让查询速度尽可能的 ...
- 理论基础 —— 图 —— 图的存储结构
[邻接矩阵] 图的邻接矩阵存储也称数组表示法,其方法是用一个一维数组存储图中的顶点,用一个二维数组存储图中的所有的边,存储顶点之间邻接关系的二维数组称为邻接矩阵. 设图 G=(V,E) 具有 n 个顶 ...
- Mysql存储结构B树与B+树与索引
首先要说明的是,B-树和B树是指同一个结构,并没有所谓的B减树,两种树是B-树和B+树. Mysql存储结构是一个B+树. 1.存储结构与索引 众所周知,索引是关系型数据库中给数据库表中一列或多列的值 ...
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)...
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
- 数据结构32:树存储结构
之前介绍的所有的数据结构都是线性存储结构.本章所介绍的树结构是一种非线性存储结构,存储的是具有"一对多"关系的数据元素的集合. (A) ...
- 数据结构(十八)树的定义与存储结构
一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m( ...
- 树的存储结构以及实现代码
树的存储结构以及实现代码 1.首先假设有一个树如下: 2.双亲表示法 我们假设以一组连续空间存储树的结点,在每个结点中,附设一个指示器指示其双亲结点到链表中的位置.这样,每个结点除了知道自己是谁以 ...
- 树的存储结构-孩子兄弟表示法
实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点 代码如下: #include <iostream> using namespace st ...
- 树的存储结构(树的二叉链表(孩子—兄弟))
// c6-5.h 树的二叉链表(孩子-兄弟)存储结构(见图6.32) typedef struct CSNode {TElemType data;CSNode *firstchild,*nextsi ...
- 数据结构之树的存储结构
数据结构之树的存储结构 思维导图 双亲表示法: 增 删 孩子表示法: 孩子兄弟表示法:(重要) 森林和二叉树的转化 思维导图 双亲表示法: 增 增加M.L节点 删 删除G节点(叶节点) 删除(非叶节点 ...
最新文章
- 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法
- 软件测试风险评估分析
- python中的self描述符__set__和__get__简单总结
- 皇nity webgl与html交互文件,Vue与UnityWebGl交互通信
- LINUX - /etc/init.d/nginx: line 51: kill: (29833) - No such process
- Teams数据统计 - 聊天消息
- 一个简单的.NET MVC 实例
- css三栏布局技巧,CSS-三栏布局的常用6种方法
- matlab 图例 显示几个,matlab图例拆分成两个多个分别显示
- 基于SSH框架的人力资源管理系统设计与实现
- echarts社区饼图 echart饼图 玫瑰图
- 风暴英雄 服务器在哪个文件夹,《风暴英雄》国服官方答疑 玩家最关心的问题都在这里...
- 这个机器人还原魔方,只需八秒!
- UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte xx in position xx: invalid continuation byte
- unitoy机器人怎么联网_乐乐智能机器人怎么联网?
- 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解
- Linux中的lo回环接口详细介绍
- Python&Opencv手势识别系统
- 支持DoH的DNS服务器,谷歌公共DNS正式支持DoH加密 更安全并且不影响速度
- 微机中的实际地址、物理地址、有效地址、逻辑地址之间的区别