数据结构_树_基础

github地址:
https://github.com/arkulo56/thought/blob/master/software/dataStruct/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84_%E6%A0%91_%E5%9F%BA%E7%A1%80.md

树-基础

基本概念

https://raw.githubusercontent.com/arkulo56/thought/master/images/datastruct/tree.png
https://raw.githubusercontent.com/arkulo56/thought/master/images/datastruct/tree.png
  1. 数据元素一对多的关系
  2. 根节点唯一
  3. 现实生活中一对多的关系很多
  4. 除了根节点,其他节点只有一个双亲节点
  5. 叶子节点无孩子,度为0
  6. 每个分支节点有一个双亲,多个孩子
  7. 子树是分支节点和他的孩子组成的树
  8. 森林是多个不相交的子树
  9. 节点的度:节点的孩子数量
  10. 树的度:节点度的最大值
  11. 深度:树的层数
  12. 兄弟:同一深度,同一双亲的节点
  13. 堂兄弟:同一深度,不同双亲的节点

树的存储结构

树不像二叉树,没有前、中、后序遍历

树也是用顺序和链式存储,但结构会比较灵活

双亲表示法

data parent

一个元素包含两个域(data,parent),数据域和指向双亲的指针(链式存储),然后把多个元素保存在一个数组(顺序存储)中。

孩子表示法

data child1 child2 ... childn

同上,每个节点都保存在数组中,而每个节点的多个指针又指向了保存在数组其他位置上的孩子节点

孩子兄弟表示法

data firstchild rightsib

逻辑和上面两种表示法相同

不同的表示法是为了解决不同的查询需求,例如查询是自下而上的,那就会用双亲表示法


总结

因为树的度无法预知,也无法控制,存储结构不容易实现,所以树不常用,从而引申出了有规律可循的‘二叉树’

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,362评论 0 3
  • 前面讲到的顺序表、栈和队列都是一对一的线性结构,这节讲一对多的线性结构——树。「一对多」就是指一个元素只能有一个前...
    Alent阅读 2,281评论 1 28
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,489评论 1 31
  • HDU 1754 I Hate It求某个范围内数据的最值,为线段树的基本功能。在数据更新时使用不太熟练,另外由于...
    碧影江白阅读 186评论 0 0
  • 获取的nsdata长度为10000,转化为byte后 我需要获取byte前1000位应该怎么做呢? Byte *d...
    白鹿Divella阅读 7,376评论 2 0