数据结构(超详细讲解!!)第二十三节 树型结构

news2024/11/18 15:48:08

1.定义

树型结构是一类重要的非线性数据结构,是以分支关系定义的层次结构。是一种一对多的逻辑关系。

树型结构是结点之间有分支,并且具有层次关系的结构,它非常类似于自然界中的树。树结构在客观世界中是大量存在的,例如家谱、行政组织机构都可用树形象地表示。树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程。等等。

树(Tree)是n (n≥0)个结点的有限集T,T为空时称为空树,否则它满足以下条件:  

 (1) T中有且仅有一个结点K0没有前驱,称K0为树的根结点(Root)。    

(2) 除根结点以外,其余结点有且仅有一个直接前驱。

(3) T中各结点可以有0个或多个后继。  

(4) 当n ≥ 1时,除根结点以外,其余结点可分为m(m≥0)个互不相交的有限集合T1,T2,…,Tm。其中每个集合又构成一棵树,树T1,T2,…,Tm被称为根结点K0的子树(Subtree)。    

树的逻辑结构表示数据之间的关系是一对多,或者多对一的关系。它的结构特点具有明显的层次关系,是一种十分重要的非线性的数据结构。

注:树的定义具有递归性,即树中还有树。

2.树的基本术语

1.父母、孩子与兄弟结点

结点的直接前驱结点称为双亲(parents)结点。

结点的直接后继结点称为孩子(child)结点。

拥有同一个父母结点的多个结点之间称为兄弟(sibling)结点。

结点的祖先(ancestor)是指从根结点到其双亲结点所经过的所有结点。(祖先结点)

结点的后代(descendant)是指该结点的所有孩子结点,以及孩子的孩子等。 (子孙结点)

祖先与后代的关系则是对父子关系的延伸,其定义了树中结点的纵向次序 。

2.度

结点的度(degree)是指结点所拥有子树的棵数。

度为零的结点称为叶子(leaf)或者终端结点

度不为零的结点称为分支结点或者非终端结点、非叶结点。

树的度是指树中各结点度的最大值。

3.结点层次、树的高度

结点的层次(level)属性反映结点处于树中的层次位置。

约定根结点的层次为1,其余结点的层次是其父母结点的层次加1.

树的高度(height)或深度(depth)是树中结点的最大层次数。

4.边、路径

设树中X结点是Y结点的父母结点,有序对(X,Y)称为连接这两个结点的分支,也称为边(edge)。

设(X0,X1,…,Xk-1)是由树中结点组成的一个序列,且(Xi,Xi+1)(0≤i<k-1)都是树中的边,则该序列称为X0到Xk-1的一条路径(path)。

路径长度(path length)为路径上的边数。

5.无序树、有序树

若把树中每个结点的各子树看成从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree);否则称为无序树(Unordered Tree)

如果规定k1和k2是兄弟,且k1在k2的左边,则k1的任一子孙都在k2的任一子孙的左边,则定义了树中结点的横向次序

6.森林

森林(Forest)是m(m≥0)棵互不相交树的集合。

给森林加上一个根结点就变成一棵树。

将树的根结点删除就变成森林。

3.树的表示方法

1.图形表示法

2.嵌套集合表示法

3.广义表表示法

根作为由子树森林组成的表的名字写在表的左边

4.凹入表示法(目录表示法)

4.抽象数据类型

ADT Tree{
     数据对象:D是具有相同属性的数据元素的集合。
     数据关系:若D为空集,则称为空树;若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
  (1) 在D中存在唯一的称为根的数据元素root, 它在关系H下没有前驱。 
   (2) 除root以外, D中每个结点在关系H下都有且仅有一个前驱。 
 基本操作:
       void CreateTree(Tree *t,definition):
               初始条件:树t不存在。
               操作结果:按definition构造树t。
        int TreeEmpty(Tree t):
             初始条件:树t存在 。
            操作结果:若t为空树, 则返回1, 否则返回0。
        int TreeDepth(Tree t)
             初始条件:树t存在。
            操作结果:返回树t的深度。
         ……
}

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

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

相关文章

nginx代理docker容器服务

场景描述 避免暴力服务端口,使用nginx代理 一个前端,一个后端,docker方式部署到服务器,使用docker创建的nginx代理端口请求到前端端口 过程 1 docker 安装nginx 1.1 安装一个指定版本的nginx docker pull nginx#启动一个ngi…

【MySQL】对表结构进行增删查改的操作

表的操作 前言正式开始建表查看表show tables;desc xxx;show create table xxx; 修改表修改表名 rename to对表结构进行修改新增一个列 add 对指定列的属性做修改 modify修改列名 change 删除某列 drop 删除表 drop 前言 前一篇讲了库相关的操作,如果你不太懂&…

麒麟信安:助力医疗行业操作系统自主创新,提升可靠性与安全性

应用场景 湖南省康复医院是省卫生健康委直属公立三级康复医院,也是全省唯一一所集预防、医疗、康复、科研、教学、健康管理为一体的省级三级公立康复医院。 湖南省康复医院使用的医慧管平台由湖南蓝途方鼎科技有限公司开发,利用互联网技术,…

好题分享(2023.11.5——2023.11.11)

目录 前情回顾: 前言: 题目一:补充《移除链表元素》 题目二:《反转链表》 解法一:三指针法 解法二:头插法 题目三: 《相交链表》 题目四:《合并两个有序数列》 题目五&…

vmware 修改主机名称 hadoop 服务器环境配置(一)

如何在虚拟机配置主机名称: 1. 如图所示在/etc 文件夹下有个hosts文件。追加映射关系: #关系 ip地址 名称 192.168.164.20 hadoop20 2. 保存后,重启reboot即可

炸裂!Sklearn 的 10 个宝藏级使用方法!

大家好,本次给大家介绍10个Sklearn方法,比较小众但非常好用。 1️.FunctionTransformer 虽然Sklearn中有很多内置的预处理操作可以放进pipeline管道,但很多时候并不能满足我们的需求。 如果是比较简单并且通过一个函数可以实现需求的情况&…

考前须知-2024年上半年系统集成项目管理工程师

可以看看23年下半年软考集成考试的难度 一、考试时间安排: 集成考试一年会考2次,上半年一次、下半年一次。考试时间4h,分批进行 系统集成项目管理工程师教材共655页,分为23章。其中,前3章为信息化与系统集成基础知识的内容,第4章…

4.5 构建onnx结构模型-Reshape

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以pow 结点进行分析 方式 方法一&am…

C语言之初阶指针

一、指针: 其实按照我的理解,当我们写c语言程序的时候,创建的变量,数组等都要在内存上开辟空间。而每一个内存都有一个唯一的编号,这个编号也被称为地址编号,就相当于,编号地址指针。 二、指针…

STM32F4 GPIO端口二极管作用——二极管钳位作用

如上图所示,有两个保护二极管,用于保护内部电路,防止I\O引脚外部过高或者过低的电压输入时造成内部电路损坏。 具体来讲:当引脚输入电压高于VDD时,上面的二极管导通,输入点电压被钳位到约VDD0.7V&#xff…

python打包部署脚本

linux可使用expect来实现自动交互,windows想要写出同样的功能脚本,只能使用python或者安装ActiveTcl 1、安装python Microsoft Store搜索python直接安装,默认会直接添加到环境变量https://www.python.org/官网下载,点击安装时会提…

比尔·盖茨谈他对软件应用和人工智能代理未来的见解

比尔盖茨在他的 Gatesnotes 网站中发表了一篇文章,分享了他对软件应用和人工智能代理未来的见解。他认为人工智能代理将大行其道,在接下来的五年里,这将完全改变。你不需要为不同的任务使用不同的应用程序。你只需用日常语言告诉你的设备你想…

基于Python优化图片亮度与噪点

支持添加噪点类型包括:添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点,还提供清除噪点的功能。 我们先看一下实测效果:(test.jpg为原图,new.jpg为添加后的图片…

基于JavaWeb+SSM+校园零售商城微信小程序系统的设计和实现

基于JavaWebSSM校园零售商城微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应…

HRNet关键点检测

HRNet是一种用于关键点检测的网络架构,它具有一些优点和缺点。 优点: 可以保持高分辨率:HRNet将高分辨率到低分辨率的子网并联连接,而不是像大多数现有解决方案那样串联连接。因此,HRNet能够保持高分辨率&#xff0c…

动态修改hosts

前言 因工作需要频繁变更hosts, 故须自己实现一个动态管理器, 市面上其实已经有了类似的软件,比如switchhosts!但因为不好集成其他功能(如远程连接KVM),所以还是决定自己开发一套。 原理 使用之前强烈建…

tcpdump抓包的字节数量与ethtool统计数据不同的原因

情况介绍 在进行RDMA抓包流量分析时,我使用ethtool工具统计了RDMA网卡的流量发送数据数量,然后使用tcpdump进行抓包。 经过分析发现,tcpdump得到的数据数量总是大于ethtool得到的数据数量,而且每个数据包会多出4个字节。 分析 …

Juniper PPPOE双线路冗余RPM配置

------------------ 浮动静态路由 set routing-options static route 0.0.0.0/0 next-hop pp0.0 qualified-next-hop pp0.1 preference 10 ----------------- RPM测试的内容,包括从哪个接口发起测试,测试ping等等 #指定探针类型用ICMP请求 #探测的目标地址 #探测间隔 #探测阈…

Java第十八章Swing程序设计

一、Swing概述 Swing 是 Java 平台的用户界面(UI)工具包,它是一种现代化的、跨平台的 UI 工具包,可以使用各种操作系统上的 Java 虚拟机(JVM)来实现,包括 Windows、Linux 和 MacOS 等。Swing 提…

CopyOnWriteArrayList内存占用过多

目录 一、CopyOnWriteArrayList二、CopyOnWriteArrayList的适用场景三、CopyOnWriteArrayList内存占用过多的解决方法四、CopyOnWriteArrayList.add()源码分析 大家好,我是哪吒。 一、CopyOnWriteArrayList CopyOnWriteArrayList是Java中的一个线程安全的ArrayLis…