二叉树的存储结构该如何选择呢
2017-11-03 02:57
260 查看
不多先上个二叉树的图:
我们先是从ABCDEFG这个顺序依次编号为1-7.
下面是描述了一个数组顺序存储结构。我们依次把A-G存入数组的索引为1到7当中。
有没有发现一个规律。假如我们的数组索引和二叉树中的编号是不是一一对应,刚好我们通过索引的计算就可以从数组当中得到当前数据的左右孩子和双亲节点。假如i代表当前的节点。公式还是i = 2i得到左孩子节点,i = 2i + 1右孩子节点。
从这里我们也发现了满二叉树或者叫完全二叉树的优势,但是事事不是会那么如意,假如我把D节点删掉,如果我们要保存这个通过下标索引得到节点的孩子,删除的节点必须占一个内存,我们设为null就可以。浪费一个内存,假如我们删除很多节点呢,比如极端的情况
通过观察上图我们只有3个数据节点,但是我们为了维护这3个节点的双亲孩子关系正确,我们还是必须开7个数据内存空间进行存储。发现有4个内存空间都是浪费的,利用率低于50%。
因此我们需要考虑其他的办法来解决空间浪费问题,我们只能把双亲孩子的关系直接通过指针存入当期节点里面的数据当中。
因为下面引入非常牛逼的链式存储结构,我想你们对链式存储结构的高效是非常了解的吧,等于是用极少的内存也就是保存孩子节点的地址即可。大家都知道地址占用的内存是很少的,假如是4G内存,那么地址空就是4G/8位 得到的子节数,然后我们从0开始编号。我记得不错话这些编号4个字节内存就可以完全存储。因此我们用4个字节数存储孩子的节点地址。
上图:
大家观察每个节点两侧的格子然后+ 箭头。我们看的出是告诉我们他关联的节点是什么。用编程语言来描述的话就是2个数据类型保存了孩子节点的地址。
下面给节点数据类型上代码
typedef char EleType
typedef struct BiTNode
{
EleType data;
4000
//保存了图中的字母
struct BiTNode *lchild, rchild; //分别保存左右孩子节点的地址
}BiTNode, *BiTree
我们先是从ABCDEFG这个顺序依次编号为1-7.
下面是描述了一个数组顺序存储结构。我们依次把A-G存入数组的索引为1到7当中。
有没有发现一个规律。假如我们的数组索引和二叉树中的编号是不是一一对应,刚好我们通过索引的计算就可以从数组当中得到当前数据的左右孩子和双亲节点。假如i代表当前的节点。公式还是i = 2i得到左孩子节点,i = 2i + 1右孩子节点。
从这里我们也发现了满二叉树或者叫完全二叉树的优势,但是事事不是会那么如意,假如我把D节点删掉,如果我们要保存这个通过下标索引得到节点的孩子,删除的节点必须占一个内存,我们设为null就可以。浪费一个内存,假如我们删除很多节点呢,比如极端的情况
通过观察上图我们只有3个数据节点,但是我们为了维护这3个节点的双亲孩子关系正确,我们还是必须开7个数据内存空间进行存储。发现有4个内存空间都是浪费的,利用率低于50%。
因此我们需要考虑其他的办法来解决空间浪费问题,我们只能把双亲孩子的关系直接通过指针存入当期节点里面的数据当中。
因为下面引入非常牛逼的链式存储结构,我想你们对链式存储结构的高效是非常了解的吧,等于是用极少的内存也就是保存孩子节点的地址即可。大家都知道地址占用的内存是很少的,假如是4G内存,那么地址空就是4G/8位 得到的子节数,然后我们从0开始编号。我记得不错话这些编号4个字节内存就可以完全存储。因此我们用4个字节数存储孩子的节点地址。
上图:
大家观察每个节点两侧的格子然后+ 箭头。我们看的出是告诉我们他关联的节点是什么。用编程语言来描述的话就是2个数据类型保存了孩子节点的地址。
下面给节点数据类型上代码
typedef char EleType
typedef struct BiTNode
{
EleType data;
4000
//保存了图中的字母
struct BiTNode *lchild, rchild; //分别保存左右孩子节点的地址
}BiTNode, *BiTree
相关文章推荐
- 第六章-树(3)二叉树的存储结构
- 如何选择数据结构
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 如何选择合适的MySQL存储引擎
- 二叉树的存储结构和实现
- 二元多项式基本运算 选择合适的存储结构表示二元多项式,并实现基本的加减运算 要求: 1)二元多项式的输入采用如下方式进行键盘输入 (5y^2+7)x^4 + (3y^4+2y+9)x^2 + (2y
- 二叉树的存储结构
- mysql的存储引擎如何选择
- mysql各种存储引擎的特性以及如何选择存储引擎
- Python实现基于二叉树存储结构的堆排序算法示例
- 二叉树存储结构
- docker从零开始 存储(六)存储驱动如何选择
- 7-11 将二叉树的顺序存储结构转换成二叉链存储结构
- 二叉树的存储结构 – 数据结构和算法45
- mysql如何选择合适的数据类型存储不同的数据
- 二叉树的存储结构
- 1201 - 数据存储 - 如何选择数据存储
- 二叉树的三叉链表存储结构
- 如何选择企业级数据存储DAS、NAS和SAN