做网站找那些公司如何在阿里云部署网站
news/
2025/9/30 6:55:44/
文章来源:
做网站找那些公司,如何在阿里云部署网站,注册公司流程图,申请网址怎么申请的第六部分、数据结构树#xff0c;树存储结构详解 数据结构的树存储结构#xff0c;常用于存储逻辑关系为 一对多 的数据。
树存储结构中#xff0c;最常用的还是二叉树#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…第六部分、数据结构树树存储结构详解 数据结构的树存储结构常用于存储逻辑关系为 一对多 的数据。
树存储结构中最常用的还是二叉树本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、哈夫曼树等详细介绍二叉树。
树是数据结构中的重点同时更是难点没有捷径需要初学者静下心死扣各个知识点。
三、二叉树的顺序存储结构看了无师自通
二叉树的存储结构有两种分别为顺序存储和链式存储。本节先介绍二叉树的顺序存储结构。 二叉树的顺序存储指的是使用顺序表数组存储二叉树。需要注意的是顺序存储只适用于完全二叉树。换句话说只有完全二叉树才可以使用顺序表存储。因此如果我们想顺序存储普通二叉树需要提前将普通二叉树转化为完全二叉树。 有读者会说满二叉树也可以使用顺序存储。要知道满二叉树也是完全二叉树因为它满足完全二叉树的所有特征。 普通二叉树转完全二叉树的方法很简单只需给二叉树额外添加一些节点将其拼凑成完全二叉树即可。如图 1 所示 图 1 普通二叉树的转化
图 1 中左侧是普通二叉树右侧是转化后的完全满二叉树。 解决了二叉树的转化问题接下来学习如何顺序存储完全满二叉树。完全二叉树的顺序存储仅需从根节点开始按照层次依次将树中节点存储到数组即可。 图 2 完全二叉树示意图
例如存储图 2 所示的完全二叉树其存储状态如图 3 所示 图 3 完全二叉树存储状态示意图
同样存储由普通二叉树转化来的完全二叉树也是如此。例如图 1 中普通二叉树的数组存储状态如图 4 所示 图 4 普通二叉树的存储状态
由此我们就实现了完全二叉树的顺序存储。 不仅如此从顺序表中还原完全二叉树也很简单。我们知道完全二叉树具有这样的性质将树中节点按照层次并从左到右依次标号1,2,3,...若节点 i 有左右孩子则其左孩子节点为 2*i右孩子节点为 2*i1。此性质可用于还原数组中存储的完全二叉树也就是实现由图 3 到图 2、由图 4 到图 1 的转变。 编写本节实现代码需要对二叉树进行层次遍历这个知识点本章有单独一节做详细介绍这里不再给出具体的代码实现。 四、二叉树的链式存储结构C语言详解
上一节讲了二叉树的顺序存储通过学习你会发现其实二叉树并不适合用数组存储因为并不是每个二叉树都是完全二叉树普通二叉树使用顺序表存储或多或多会存在空间浪费的现象。
本节我们学习二叉树的链式存储结构。 图 1 普通二叉树示意图
如图 1 所示此为一棵普通的二叉树若将其采用链式存储则只需从树的根节点开始将各个节点及其左右孩子使用链表存储即可。因此图 1 对应的链式存储结构如图 2 所示 图 2 二叉树链式存储结构示意图 由图 2 可知采用链式存储二叉树时其节点结构由 3 部分构成如图 3 所示
指向左孩子节点的指针Lchild节点存储的数据data指向右孩子节点的指针Rchild 图 3 二叉树节点结构
表示该节点结构的 C 语言代码为 typedef struct BiTNode{ TElemType data;//数据域 struct BiTNode *lchild,*rchild;//左右孩子指针 struct BiTNode *parent; }BiTNode,*BiTree; 图 2 中的链式存储结构对应的 C 语言代码为 #include stdio.h #include stdlib.h #define TElemType int typedef struct BiTNode{ TElemType data;//数据域 struct BiTNode *lchild,*rchild;//左右孩子指针 }BiTNode,*BiTree; void CreateBiTree(BiTree *T){ *T(BiTNode*)malloc(sizeof(BiTNode)); (*T)-data1; (*T)-lchild(BiTNode*)malloc(sizeof(BiTNode)); (*T)-lchild-data2; (*T)-rchild(BiTNode*)malloc(sizeof(BiTNode)); (*T)-rchild-data3; (*T)-rchild-lchildNULL; (*T)-rchild-rchildNULL; (*T)-lchild-lchild(BiTNode*)malloc(sizeof(BiTNode)); (*T)-lchild-lchild-data4; (*T)-lchild-rchildNULL; (*T)-lchild-lchild-lchildNULL; (*T)-lchild-lchild-rchildNULL; } int main() { BiTree Tree; CreateBiTree(Tree); printf(%d,Tree-lchild-lchild-data); return 0; } 程序输出结果 4 其实二叉树的链式存储结构远不止图 2 所示的这一种。例如在某些实际场景中可能会做 查找某节点的父节点 的操作这时可以在节点结构中再添加一个指针域用于各个节点指向其父亲节点如图 4 所示 图 4 自定义二叉树的链式存储结构 这样的链表结构通常称为三叉链表。 利用图 4 所示的三叉链表我们可以很轻松地找到各节点的父节点。因此在解决实际问题时用合适的链表结构存储二叉树可以起到事半功倍的效果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922548.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!