当前位置: 首页 > news >正文

树型结构(知识点梳理及例题精讲)

大家好啊,这一集,我们来学习树型结构,请确保看完预习篇,再来看此篇哦

树型结构(预习课)-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

三、总结与提示

树型结构是一种层次化的数据结构,类似于树的生物结构,由根节点、父节点和子节点组成。文章中提到的树型结构是指在计算机科学领域中常用的一种数据结构,具有如下特点:

  1. 根节点:树型结构中的根节点是整棵树的起始点,它没有父节点,是树的顶端。
  2. 父节点和子节点:除了根节点外,每个节点都有且仅有一个父节点,但可以有多个子节点。父节点和子节点之间形成了层次关系。
  3. 结构层次:树型结构是一种层次化结构,每个节点都处于某一层次上,根据节点之间的关系可以将树分为不同的层次。
  4. 分支结构:树型结构的节点之间通过有向边(也称为分支)相互连接,形成一种自上而下的分支结构。
  5. 子树:树中的任意节点及其所有子孙节点组成的集合称为子树,可以看作是一个独立的小树。
  6. 树的遍历:对树中的节点进行遍历是一种重要的操作,常见的方式包括前序遍历、中序遍历和后序遍历等。

总的来说,树型结构是一种非常灵活和常用的数据结构,适用于各种场景,如层次化数据的表示、文件系统的组织、组织结构的管理等。在计算机科学中,树型结构的应用非常广泛,能够高效地存储和组织数据,提供便捷的操作方式,是构建各种复杂系统的基础之一。

四、探索与提升 

 

树型结构是一种常见的数据结构,其好处和使用场景如下:

  1. 好处

    • 组织性强:树型结构可以清晰地展示层级关系,便于组织和管理数据,使数据的结构化更清晰。
    • 快速查找:通过树的层级结构,可以快速定位目标数据,提高查找效率。
    • 插入和删除效率高:在树中插入和删除节点相对容易且效率较高,不会对整个数据结构造成大规模的改变。
    • 适用于递归处理:树型结构天然适合递归算法的处理,例如树的遍历操作。
  2. 使用场景

    • 文件系统:文件系统就是一个常见的树型结构,文件夹作为节点,文件作为叶子节点,便于组织和访问文件。
    • 组织结构:公司的组织结构可以使用树型结构来表示,从顶层管理者到各级部门和员工的层级关系清晰可见。
    • 目录导航:网站的导航菜单和分类结构通常也采用树型结构,方便用户快速浏览和查找信息。
    • 数据库索引:数据库中的索引采用了B树和B+树等树型结构,用于加快数据的检索速度。
    • 编程中的数据表示:在算法和数据结构中,树型结构经常用于表示数据之间的关系,例如二叉树、平衡树等。

总的来说,树型结构在许多应用场景下都能够提供良好的组织性和查找效率,适合表示具有层级结构的数据。

 

         每一个成功者都有一个开始。勇于开始,才能找到成功的路。 ------旺仔的编程小屋

----------------------------------------------------------结束啦--------------------------------------------------------------

相关文章:

  • 一键多环境构建——用 Hvigor 玩转 HarmonyOS Next
  • Docker 部署 Redis:快速搭建高效缓存服务
  • 解决yarn install 报错 error \node_modules\electron: Command failed.
  • 【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》
  • Unity MR开发:探索混合现实的无限可能 (VisionPro和HoloLens 2 对比)
  • 注意力机制:Transformer如何用“数学凝视“统治AI?
  • 深度学习物理信息神经网络PINN+大模型辅助编程​
  • continue插件实现IDEA接入本地离线部署的deepseek等大模型
  • Kafka消息可视化工具Offset Explorer
  • windows中kafka4.0集群搭建
  • STM32F103系列单片机寄存器操作和标准库操作
  • SpringCloud微服务架构设计与实践 - 面试实战
  • Web3中心化交易所钱包-批量地址生成业务
  • 【RocketMq源码篇-01】环境搭建、基本使用、可视化界面
  • ES6 模块化 与 CommonJS 的核心概念解析
  • linux系统如何锁定一个用户?又如何解锁该用户呢
  • 项目中数据结构为什么用数组,不用List
  • 【C++ 类和数据抽象】static 类成员
  • Qt —— 在Linux下试用QWebEngingView出现的Js错误问题解决(附上四种解决办法)
  • PostgreSQL-日志管理介绍
  • 出国留学、来华留学呈现双增新趋势,“00后留学生个性鲜明”
  • 三大猪企去年净利润同比均较大幅度增长,资产负债率齐降
  • 欢迎回家!日本和歌山县4只大熊猫将于6月底送返中国
  • “谁羽争锋”全国新闻界羽毛球团体邀请赛在厦门开赛
  • 受折纸艺术启发可移动可变形的新型超材料问世
  • 国防部:“台独”武装摆练纯属搞心理安慰,怎么演都是溃败的死局