二叉树的存储结构
2017-09-30 15:45
204 查看
由于二叉树是一种特殊的树,这种特殊的树,采用顺序存储结构就可以实现。既然是顺序存储结构,必然的是通过数组来实现了。
有一种极端情况,就是深度为k的右斜树,只有k个结点,如果想要存储它,就要将它转换为二叉树,那么必然的需要2^k-1个结点,这么多结点中,只有k个结点是有效数据,所以,会造成空间的浪费。所以,顺序存储结构只适用于完全二叉树。
那么,对于那种类似于极端情况的树,该如何存储呢?显然,顺序存储并不适合它。那么,可以考虑采用链式存储。也就是二叉链表。因为,二叉树每个结点最多有两个孩子,所以,在设计结构时,有一个变量用来存放数据,还有两个指针变量指向左孩子和右孩子。结构定义如下:
有一种极端情况,就是深度为k的右斜树,只有k个结点,如果想要存储它,就要将它转换为二叉树,那么必然的需要2^k-1个结点,这么多结点中,只有k个结点是有效数据,所以,会造成空间的浪费。所以,顺序存储结构只适用于完全二叉树。
那么,对于那种类似于极端情况的树,该如何存储呢?显然,顺序存储并不适合它。那么,可以考虑采用链式存储。也就是二叉链表。因为,二叉树每个结点最多有两个孩子,所以,在设计结构时,有一个变量用来存放数据,还有两个指针变量指向左孩子和右孩子。结构定义如下:
typedef struct BiNode{ TElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree;
相关文章推荐
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- 二叉树的存储结构 - 数据结构和算法45
- 二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树
- 6.33③ 假定用两个一维数组L[1..n]和R[1..n]作为 有n个结点的二叉树的存储结构, L[i]和R[i]分别指 示结点i的左孩子和右孩子,0表示空。试写一个算法 判别结点u是否为结点v的
- 二叉树的简单介绍以及二叉树的存储结构
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 二叉树的存储结构该如何选择呢
- _DataStructure_C_Impl:二叉树的二叉链表存储结构
- 二叉树的链式存储与线索二叉树-数据结构(14)
- 数据结构之C/C++实现二叉树的链式存储
- 二叉树的存储结构
- 二叉树的存储结构
- 二叉树的非递归中序遍历(二叉线索存储结构)
- 优先队列,由于优先队列的树形结构是完全二叉树,所以可以使用数组的形式去存储,我的上一个博客是用二叉树的形式去存储优先队列的
- 数据结构--二叉树(定义与存储结构)
- 6.2二叉树及二叉树存储结构
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 二叉树的存储结构
- 二叉树的三叉链表存储结构的简单实现