数据结构【树】

news2024/11/19 6:25:26

数据结构与算法之树结构

  • 树的定义
  • 树的基本术语
  • 树结构和线性结构的比较
  • 树的应用

树的定义

树是一种非线性的数据结构,它是一个包含n(n>=1)个节点,(n-1)条边的有穷集合。树有多种表现形式,把它叫做“树”是因为它看起来像一个倒挂的树,也就是说它是根朝上,叶子朝下的。

树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。
在任意一棵非空树中:
a. 有且仅有一个特定的称为根(Root)的结点;
b. 当 n>1时,其余结点可分为 m(m>0)个互不相交的有限集 T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)

一个树可以有多个子树:
在这里插入图片描述
树也有其他的表示方式:嵌套集合、广义表、凹入表示
在这里插入图片描述

树的基本术语

在这里插入图片描述
节点(node) 树结构中的每一个元素称为一个节点,如上图中的ABC…M。除了根结点外,每个子结点可以分为多个不相交的子树。
根节点(root) 没有父节点的节点叫做根节点,如上图中的A。
父节点(parent) 一个节点的上级节点叫做它的父节点,一个节点最多只能有一个父节点,如上图中C是G的父节点。
子节点(child) 一个节点的下级节点叫做它的子节点,一个节点的子节点可以有多个,每一个非根结点有且只有一个父结点,如上图中的IJK是E的子节点。
兄弟节点(siblings) 拥有相同父节点的节点叫做兄弟节点,如上图中的L和K是兄弟节点。
叶子节点(leaf) 没有子节点的节点叫做叶子节点,如图中的IJKLM。
边(dege) 父子节点间的连接称为边,一棵树的边数为(n-1)。
节点的权(weight) 节点上的元素值。
路径(path) 从root节点找到该节点的路线,如上图中L的路径为A-D-H-L。路径的长为该路径上边的条数,L路径的长为3(n-1)。
层(layer) 距离根节点相等的路径长度为一层,如上图中A为第一层;BCD为第二层;EFGHIJ为第三层;KLM为第四层。
子树(child tree) 以某一节点(非root)做为根的树称为子树,如以E为根的树称为A的子树。
树的高度(height) 树的最大层数,上图中树的高度为4。
节点的深度(height) 当前节点的到根节点的节点数量。
森林(words) 多棵子树构成树林。

需要注意的是,高度和深度是不同的概念。树的高度是根节点到最深叶子节点的路径长度,而深度是某个节点到根节点的节点数量。因此,在一棵树中,高度和深度的值是不相等的。根节点的深度为0。

树结构和线性结构的比较

树,便能提高数据的存储和读取效率。

树的应用

1、树可以应用在操作系统中的进程管理。
在操作系统中,进程可以通过树结构来管理。每个进程都有一个父进程,如果这个进程还有子进程,那么这些子进程就是这个进程的子节点。
2、文件系统中的目录结构
在文件系统中,目录可以通过树结构来组织。每个目录都有一个父目录,如果这个目录还有子目录,那么这些子目录就是这个目录的子节点。
3、编译器中的语法分析
在编译器中,语法可以通过树结构来表示。语法树是指由语法规则构成的树形结构,它可以将程序的语法结构表示为一个树形结构,方便进行语法分析。

参考资料:数据结构与算法基础-王卓老师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis主从(windows版本)

1. 下载redis 1.1、Github下载地址:Releases microsoftarchive/redis GitHub 1.2、百度网盘下载地址:Redis-x64-3.2.100.zip 密码:kdfq 1.3、也可以自行从其它地方下载 2.配置redis主,设置服务,然后启动 端口…

【Vue3】学习笔记-Composition API 的优势

1.Options API 存在的问题 使用传统OptionsAPI中(配置型API),新增或者修改一个需求,就需要分别在data,methods,computed里修改 。 这张图告诉我们,我们在v2的时候功能放到配置中。它想告诉我们所有的功能都拆散了。 …

0基础学习VR全景平台篇 第58篇:高级功能-AI人像合成

功能位置示意 一、本功能将用在哪里? AI人像合成是蛙色VR商业级方案中,重要的裂变推广功能之一; 选取对应照片,通过后台生成实现个人与场景的合影留念,一键转发分享快速传播裂变。 观者者使用本功能时,将…

基于OpenCV 和深度学习实现微笑检测-附免费源码

文末提供免费的源代码下载链接 我们将使用 SMILES 数据集来训练我们的卷积神经网络。一旦我们的模型训练完毕,我们将按照与上一个教程中相同的步骤来检测图像和视频中的微笑: 我们将使用 Haar 级联来检测图像中的人脸。从图像中提取人脸区域。将面部区域传递给我们的网络进行…

Spring Boot 中的 JPA 是什么,如何使用

Spring Boot 中的 JPA 是什么,如何使用 简介 JPA (Java Persistence API) 是一种标准的 ORM (Object Relational Mapping) 规范,用于将 Java 对象映射到关系型数据库中。它提供了一种面向对象的方式来操作数据库,使得开发者可以更加方便地进…

【openGauss5.0企业版一主一备集群】—运维

【openGauss5.0企业版一主一备集群】—运维 🔻 一、openGauss5.0主从集群的维护🔰 1.1 查看单个节点状态🔰 1.2 查看集群所有节点状态🔰 1.3 集群启停🔰 1.4 switchover 主备切换🔰 1.5 模拟主库宕机&#…

Git gui教程---第三篇 Git gui的使用 配置提交信息

配置提交信息 配置好提交的信息,跑路的话,别人也能找到你,哈哈哈。点击“编辑”,选择“选项”,需要关注的地方有三个,一个是全局的版本库,一个是TEST版本库,一个是合并工具。 全局代…

数据库表的创建以及操作

1.创建数据库Market,在Market中创建数据表customers,customers表结构如表4.6所示,按要求进行操作。 (1)创 建数 据库 Market。 (2)创建数据表custo mers, 在c_num字段 上添加主键约束 和自增 约束,在c_birth字段 上添加非空约束。 (3)将c_c…

梯度流(Gradient Flow):探索通往最小值之路

©PaperWeekly 原创 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP、神经网络 在这篇文章中,我们将探讨一个被称为“梯度流(Gradient Flow)”的概念。简单来说,梯度流是将我们在用梯度下降法中寻找最小值的过程中的各个点连…

【Linux】进程信号之信号的产生

进程信号 一 一、信号入门1、信号的一些特性2、信号的处理方式信号捕捉初识 3、Linux下的信号 二、信号的产生1、通过终端按键产生信号2、调用系统函数向进程发信号a、kill函数b、raise函数c、abort函数 3. 由软件条件产生信号4、硬件异常产生信号 结语 一、信号入门 什么是信号…

yolov7增加AFPN

论文学习:AFPN: Asymptotic Feature Pyramid Network for Object Detection-全新特征融合模块AFPN,完胜PAFPN_athrunsunny的博客-CSDN博客 论文的作者是说在yolo上效果有提升,不过还没有测试,具体还不清楚,把代码撸出来…

开源网安受邀参加2023全球数字经济大会,分享软件安全落地实践经验

近日,2023全球数字经济大会数字安全生态建设专题论坛在京隆重举行。作为2023全球数字经济大会的重要组成部分,本次论坛围绕“数字安全生态建设”这一主题,邀请政府主管部门、行业专家学者、关键信息基础设施运营主体、数字安全企业、数据要素…

第八章 实现商品详情数据异构及静态化

lua操作 设计图详解 1、 普通模式,用户获得redis数据需要经过nginx,php-fpm,php框架,再到redis 2 、直接模式,对于部分高并发请求, 为了提高吞吐率, 有必要砍掉一些环节和应用来实现快速响应,如上图,这里我们将普通模式中的php-fpm和php框架砍掉了。nginx直接从r…

arvr虚拟现实服务商为文旅行业提供全新的交互式营销体验

在AR领域,很多企业都会遇到场景化展示需求的问题,比如需要制作一个宣传片视频、远程协作软件或者产品营销等等,对于这样的场景制作需求,一般都是找像深圳华锐视点这样的第三方AR开发技术公司进行AR场景定制。 AR是将计算机生成的虚…

在萌诺母婴综合体旗下萌诺尊享(新华店)坐月子可以享受哪些服务?

第一次怀孕生孩子内心比较恐惧,尤其担心月子坐不好身体和身材难以恢复。在怀孕期间刷微博看到郑恺苗苗在萌诺尊享(新华店)坐月子的vlog,感觉这里的环境和服务都还不错,主要是看到苗苗在月子期间身材恢复的很快,于是和老公亲自去门…

深入理解计算机系统(一)

信息就是位上下文 #include<stdio.h>int main() {printf("hello,world\n");return 0; } 上面是一个hello程序。它的生命周期是从一个源程序开始的&#xff0c;就是程序员通过编辑器创建并保存的文本文件&#xff0c;文件名是hello.c。&#xff08;源程序实际…

QT 之蓝牙BLE编程

简介 使用PC蓝牙和蓝牙透传模块通讯。 准备 QT core gui bluetoothQT蓝牙库相关头文件 #include <QtBluetooth/qbluetoothglobal.h> #include <QtBluetooth/qbluetoothlocaldevice.h> #include <qbluetoothaddress.h> #include <qbluetoothdev…

造船码头行车/电动葫芦控制系统的无线技改

一、应用背景 近年来&#xff0c;我国造船业在高技术船舶研发和建造方面持续取得新突破&#xff0c;据统计截止到2022年&#xff0c;我国造船业完工量、新接订单量、手持订单量三大指标国际市场份额均保持世界前列。连续13年位居全球居首。随着船舶制造的综合能力不断提高&…

微信小程序制作 购物商城首页 【内包含源码】

1、实现效果 手机效果预览,这里的首页使用到了轮播图。页面图片数据可以替换成自己的数据。 2、开发者工具效果图 3、项目的目录结构 4、首页核心代码 4.1 index.js 这里用来存放数据,页面的数据。目前是假数据,也可以调用接口接收真实数据 // index.jsimport {request }…

spring-依赖注入的方式

setter注入-可选依赖注入 简单类型&#xff1a; 1.配置类 2.set方法 引用类型&#xff1a; 构造器注入-强制依赖注入 简单类型&#xff1a; 引用类型&#xff1a; 通过有参构造&#xff0c;获得需要注入的对象 <construct-arg />标签中name属性中填写的时构造方…