树型结构(知识点梳理及例题精讲)
大家好啊,这一集,我们来学习树型结构,请确保看完预习篇,再来看此篇哦
树型结构(预习课)-CSDN博客
话不多说,直接开讲
-------------------------------------------------------分割线-----------------------------------------------------------------
一、树的概念
1.引例
【问题描述】小明无意中发现了一份家谱,家谱中记录了从小明爷爷到小明,共3代人的亲缘关系,请你帮小明计算一下他有多少堂兄弟(为计算方便,给出的家谱图中只包括男性成员)
输入输出格式:
输入格式:
输入中,家庭成员的姓名使用整数编号表示,其中小明爷爷的编号固定为1;
第一行:三个整数n, m和k,表示家谱中共有n个人,m条血缘关系,小明的编号是k;
接下来m行,每行两个用空格隔开的整数x和y。表示x是y的父亲。
输出格式:
一行:一个整数,表示小明堂兄弟的数量。
第一行:三个整数n, m和k,表示家谱中共有n个人,m条血缘关系,小明的编号是k;
接下来m行,每行两个用空格隔开的整数x和y。表示x是y的父亲。
堂兄弟:如果A和B是同一代人,且不是亲兄弟,那么他们是堂兄弟
2.概念
树 (Tree) 是 n (n≥0) 个结点的有限集。n==0时称为空树。在任意一棵非空树中:
(1)树中的元素称为:结点。
(2) 有且仅有一个称为根(Root)的结点,如图中的A结点。
(3)
树的定义是递归的,树的子树也是一棵树,子树的子树也是一棵树
3.结点和度
树的结点包含一个数据元素及若干指向其子树的分支
结点拥有的子树(分支)数量称为结点的度。
度为0的结点称为叶子结点(Leaf)或终端结点
度不为0的结点称为非终端结点或分支结点,除根结点以外,分支结点也称为内部结点
树的度是树内各结点的度的最大值。示例中图的度 = 结点A的度= 3。
4.结点间的关系
(1)孩子和双亲:结点的子树的根称为该节点的孩子,该节点称为其孩子的双亲(Parent)。
(2) 兄弟:同一个双亲的孩子之间互称兄弟。
(3)祖先:结点的祖先是从根到该结点所经分支上的所有节点(自己也是自己的祖先)
5.层次和深度
(1)层次:结点的层次(Level)从根开始定义,根为第1层,根的孩子为第2层,以此类推。
(2)若某节点在第i层,则其孩子结点就在第i+1层
(3)双亲在同一层的结点互为堂兄弟
(4)树中节点的最大层次称为树的深度(Depth)或高度。
6.有序树和无序树
如果树中节点的各子树从左到右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。
7.森林
二、树的存储
1.双亲表示法
树中除了根结点以外,每个结点都有且仅有一个双亲结点,可以用一组连续的空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲的位置。也就是说,每个结点除了知道自己是谁以外,还知道它的双亲在哪里。
通常情况下,从下标1开始存储,双亲为0的结点是根结点,即:root.parent == 0。
优点:对于任意结点x,可以很方便的找到其双亲结点、祖先结点和根结点(向上查找)。
缺点:对于任意结点x,如果要查找其所有的孩子结点,需要遍历所有结点
举例说明
输入格式:
输出格式:
代码演示:
2.孩子表示法
孩子表示法:每个结点有一个数据域,多个指针域,每个指针指向一个孩子结点。
树的度为3,最多有3棵子树
优点:很容易找到任一结点的孩子节点。
缺点:如果要寻找某个节点的父节点,需要遍历整个存储表。
代码实现
通常情况下,从下标1开始存储,双亲为0的结点是根结点,即:root.parent == 0
示例
3.双亲孩子表示法
双亲孩子表示法:在结点存储中既包含一个指针域用来指向其双亲结点,同时有多个指向其孩子结点的指针。
通常情况下,从下标1开始存储,双亲为0的结点是根结点,即:root.parent ==0
三、总结与提示
树型结构是一种层次化的数据结构,类似于树的生物结构,由根节点、父节点和子节点组成。文章中提到的树型结构是指在计算机科学领域中常用的一种数据结构,具有如下特点:
- 根节点:树型结构中的根节点是整棵树的起始点,它没有父节点,是树的顶端。
- 父节点和子节点:除了根节点外,每个节点都有且仅有一个父节点,但可以有多个子节点。父节点和子节点之间形成了层次关系。
- 结构层次:树型结构是一种层次化结构,每个节点都处于某一层次上,根据节点之间的关系可以将树分为不同的层次。
- 分支结构:树型结构的节点之间通过有向边(也称为分支)相互连接,形成一种自上而下的分支结构。
- 子树:树中的任意节点及其所有子孙节点组成的集合称为子树,可以看作是一个独立的小树。
- 树的遍历:对树中的节点进行遍历是一种重要的操作,常见的方式包括前序遍历、中序遍历和后序遍历等。
总的来说,树型结构是一种非常灵活和常用的数据结构,适用于各种场景,如层次化数据的表示、文件系统的组织、组织结构的管理等。在计算机科学中,树型结构的应用非常广泛,能够高效地存储和组织数据,提供便捷的操作方式,是构建各种复杂系统的基础之一。
四、探索与提升
树型结构是一种常见的数据结构,其好处和使用场景如下:
好处:
- 组织性强:树型结构可以清晰地展示层级关系,便于组织和管理数据,使数据的结构化更清晰。
- 快速查找:通过树的层级结构,可以快速定位目标数据,提高查找效率。
- 插入和删除效率高:在树中插入和删除节点相对容易且效率较高,不会对整个数据结构造成大规模的改变。
- 适用于递归处理:树型结构天然适合递归算法的处理,例如树的遍历操作。
使用场景:
- 文件系统:文件系统就是一个常见的树型结构,文件夹作为节点,文件作为叶子节点,便于组织和访问文件。
- 组织结构:公司的组织结构可以使用树型结构来表示,从顶层管理者到各级部门和员工的层级关系清晰可见。
- 目录导航:网站的导航菜单和分类结构通常也采用树型结构,方便用户快速浏览和查找信息。
- 数据库索引:数据库中的索引采用了B树和B+树等树型结构,用于加快数据的检索速度。
- 编程中的数据表示:在算法和数据结构中,树型结构经常用于表示数据之间的关系,例如二叉树、平衡树等。
总的来说,树型结构在许多应用场景下都能够提供良好的组织性和查找效率,适合表示具有层级结构的数据。
每一个成功者都有一个开始。勇于开始,才能找到成功的路。 ------旺仔的编程小屋
----------------------------------------------------------结束啦--------------------------------------------------------------