【数据结构】什么是树?

news2025/2/2 20:52:58

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022


📌树的定义

树(Tree)是n(n≥0)个结点的有限集.n=0时称为空树.

在任意一颗非空树中:

  1. 有且仅有一个特定的称为根(Root)的结点;
  2. 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T_{1},T_{2},......,T_{m},其中每一个集合本身又是一颗树,并且称为根的子树(SubTree),如下图:

有关树的定义我们还需强调两点:

  1. n>0时根节点是唯一的,不可能存在多个根节点.
  2. m>0时,子树的个数没有限制,但它们一定是互不相交的.下图的两个结构就不符合树的定义,因为它们都有相交的子树:

📌树的相关概念

  • 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6.
  • 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I、K、L、...等节点为叶节点.
  • 非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G、J等节点为分支节点.
  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点.
  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点.
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点.
  • 树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6.
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4.
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点.
  • 节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先.
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙.
  • 森林:由m(m>0)棵互不相交的树的集合称为森林.

📌线性结构与树结构的对比

线性结构

  • 第一个数据元素:无前驱
  • 最后一个数据元素:无后继
  • 中间元素:一个前驱一个后继

树结构

  • 根节点:无双亲且唯一
  • 叶节点:无孩子,可以存在多个
  • 中间节点:一个双亲多个孩子

📌树的抽象数据类型

这里我们给出了一些树的基本常用操作:

ADT 树(tree)
Data
    树是由一个根结点和若干棵子树构成。树中结点具有相同数据类型及层次关系。
Operation
    InitTree(*T):构造空树T。
    DestroyTree(*T):销毁树T。
    CreateTree(*T,definition):按definition中给出树的定义来构造树。
    ClearTree(*T):若树T存在,则将树T清为空树。
    TreeEmpty(*T):若树T为空树,返回true,否则返回false。
    TreeDepth(*T):返回树T的深度。
    Root(T):返回T的根结点。
    Value(T,cur_e):cur_e是树T中一个结点,返回此结点的值。
    Assign(T,cur_e,value):给树T的结点cur_e赋值为value。
    Parent(T,cur_e):若cur_e是树T中的非根结点,则返回它的双亲,否则返回空。
    LeftChild(T,cur_e):若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空。
    RightSibling(T,cur_e):若cur_e有右兄弟,则返回它的右兄弟,否则返回空。
    InsertChild(*T,*p,i,c):其中p指向树T的某个结点,i为所指结点p的度加上1,
               非空树c与T不相交,操作结果为插入c为树T中p指结点的第i棵子树。
    DeleteChild(*T,*p,i): 其中p指向树T的某个结点, i为所指结点p的度,操作
                结果为删除T中p所指结点的第i棵子树。
endADT

📌树的存储结构

对于树的存储结构,我们这里介绍三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。

🎏双亲表示法

在链表中,我们设置的结点结构是由一个数据域和一个指针域构成的,如下图:

而到了树结构中,由于树中包含了诸多重要的要素,我们的结点构成就非常的灵活了,以双亲表示法为例,我们在每个结点中,附设一个指示器指示其双亲结点在数组的位置.也就是说,每个节点除了知道自己是谁外,还知道它的双亲在哪里.它的结点结构如下图所示:


🎏孩子表示法

孩子表示法的思路是:

把每个结点放到一个顺序存储结构的数组里,再对每个结点的孩子建立一个单链表体现它们的关系.

具体办法是:

把每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空.然后n个头指针又组成一个线性表,采用顺序存储结构,放进一个一维数组中,如下图所示:


🎏孩子兄弟表示法

任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的.因此,我们设置两个指针,分别指向该结点的第一个孩子和此节点的右兄弟.

结点示意图:

该方法实现的树如下图所示:


结语

希望这篇树的介绍能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【数据结构】什么是线性表?

【数据结构】线性表的链式存储结构

【数据结构】什么是栈?

【数据结构】用C语言实现顺序栈(附完整运行代码)

【数据结构】深入浅出理解链表中二级指针的应用

【数据结构】10道经典面试题目带你玩转链表


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

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

相关文章

flutter开发实战-设置bottomNavigationBar中间按钮悬浮效果

flutter开发实战-设置bottomNavigationBar中间按钮悬浮的效果 在使用tabbar时候,可以使用bottomNavigationBar来设置中间凸起的按钮,如下 一、效果图 中间按钮凸起的效果图如下 二、实现代码 我们使用BottomAppBar 一个容器,通常与[Sscaf…

AcWing算法提高课-1.4.2股票买卖 IV

算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 给定一个长度为 n n n 的数组,数组中的第 i i i 个数字表示一个给定股票在第 i i i 天的价格。 设计一个算法来计算你所能获取的最大利润,你最多可以完成 k k k 笔交易…

百度网盘资源下载慢解决方法

1、使用百度网盘客户端,设置使用空闲带宽下载 亲测,可以一定程度上解决下载慢的问题,但是对于有些文件下载还是很慢就不清楚为什么了。 2、使用IDM进行下载 (1)、第一步下载和安装IDM 搜索后,普通下载后安…

JMeter---JSON提取器

JMeter的JSON提取器是一个用于从JSON响应中提取数据的元件。它可以从JSON响应中提取特定字段的值,并将这些值用于后续的测试步骤。 使用JSON提取器的步骤如下: 添加一个HTTP请求,用于获取包含JSON响应的数据。 在HTTP请求之后添加一个JSON提…

【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发

文章目录 实验架构图1. 准备实验环境2. 创建CloudFront分配、配置动、静态资源分发2.1 创建CloudFront分配,添加S3作为静态资源源站2.2 为CloudFront分配添加动态源站 在本实验——使用CloudFront进行全站加速中,将了解与学习Amazon CloudFront服务&…

【Amazon 实验③】验证源请求策略将特定的请求信息转发至源站

文章目录 1. 使用源请求策略1.1 什么是源请求策略1.2 源请求策略和缓存策略的关系 2. 实验:验证源请求策略将特定的请求信息转发至源站 接上一篇文章【Amazon 实验②】使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为,本篇文章主…

《每天一分钟学习C语言·七》指针、字节对齐等

1、 对于二维数组如a[3][4]可以当做有三个元素的一维数组,每个元素包含四个小元素。 2、 printf(“%-5d”, i); //负号表示左对齐,5d表示空五个光标的位置 3、 栈:先进后出,堆:先进先出 4、 (1&#xff…

机器学习笔记(一)从波士顿房价预测开始,梯度下降

从波士顿房价开始 目标 其实这一章节比较简单,主要是概念,首先在波士顿房价这个问题中,我们假设了一组线性关系,也就是如图所示 我们假定结果房价和这些参数之间有线性关系,即: 然后我们假定这个函数的损失函数为…

罗德与施瓦茨FSV40-N手持式频谱分析仪

描述 R&S FSV是速度最快、功能最全面的信号和频谱分析仪,适用于从事RF系统开发、生产、安装和服务的注重性能、注重成本的用户。 频率范围高达3.6 GHz/7 GHz/13.6 GHz/30 GHz 40 MHz分析带宽 0.4 dB级测量不确定度,最高7 GHz 针对GSM/EDGE、WCDMA/…

面试高频的TCP知识点总结,比我想象得还要详细

下午好,我的网工朋友。 TCP 作为传输层的协议,了解它,拿下它,是一个网络工程师素养的体现,也是面试中经常被问到的知识点。 我们账号之前的文章里也写过不少关于TCP相关的文章,感兴趣的朋友们可以点击下方…

Tekton

一. 概念 Tekton 官网 Github Tekton 是一种用于构建 CI/CD 管道的云原生解决方案,它由提供构建块的 Tekton Pipelines,Tekton 作为 Kubernetes 集群上的扩展安装和运行,包含一组 Kubernetes 自定义资源,这些资源定义了您可以为…

Vue表格中鼠标移入移出input显示隐藏 ,有输入值不再隐藏

Vue表格中鼠标移入移出input显示隐藏 , 不再隐藏的效果 <el-tableref"table":data"tableDatas"borderstyle"width: 100%":span-method"arraySpanMethod"id"table"row-key"id"cell-mouse-enter"editCell&q…

Tarjan-vDCC,点双连通分量,点双连通分量缩点

前言 双连通分量是无向图中的一个概念&#xff0c;它是指无向图中的一个极大子图&#xff0c;根据限制条件可以分为边双连通分量和点双连通分量&#xff0c;欲了解双连通分量需先了解Tarjan算法&#xff0c;以及割点割边的概念及求解。本篇博客介绍点双连通分量的相关内容。 前…

简单了解一下当前火热的大数据 -- Kylin

神兽麒麟 一、Apache Kylin 是什么&#xff1f;二、Kylin架构结语 一、Apache Kylin 是什么&#xff1f; 由eBay公司中国团队研发&#xff0c;是一个免费开源的OLAP多维数据分析引擎优点 超快的响应速度&#xff0c;亚秒级支持超大数据集&#xff08;PB以上&#xff0c;千亿记…

数字人解决方案——ER-NeRF实时对话数字人模型推理部署带UI交互界面

简介 这个是一个使用ER-NeRF来实现实时对话数字人、口播数字人的整体架构&#xff0c;其中包括了大语言回答模型、语音合成、成生视频流、背景替换等功能&#xff0c;项目对显存的要求很高&#xff0c;想要达到实时推理的效果&#xff0c;建议显存在24G以上。 实时对话数字人 …

关于Python里xlwings库对Excel表格的操作(十六)

这篇小笔记主要记录如何【设置单元格数据的对齐方式】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】&#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xff08;2&#xff09;如何在Wps下…

MyBatis——MyBatis的延迟加载

MyBatis的延迟加载&#xff08;一对多查询案例&#xff09; 1.什么是延迟加载&#xff1f; 开启延迟加载后&#xff0c;在真正使用数据的时候才发起级联查询&#xff0c;不用的时候不查询。 2.pojo User类&#xff1a; package com.wt.pojo;import java.io.Serializable; …

Rust中peekable的使用

在 Rust 中&#xff0c;从迭代器中获取&#xff08;也就是“消费”&#xff09;一个元素时&#xff0c;每次调用 next 方法都会“消费”迭代器的一个元素&#xff0c;这意味着此元素被从迭代器中移除并返回给调用者&#xff0c; 一旦一个元素被消费&#xff0c;它就不能再次从同…

Python中的//, /, % 运算符详解与区别

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;//, /, % 是常用的数学运算符&#xff0c;用于执行整除、除法和取余操作。本文将深入探讨这三个运算符的作用、用法以及区别&#xff0c;并通过丰富的示例代码帮助大家更好地理解它们的用…

大数据开发职业介绍

........................................................................................................................................................... 大数据开发转正 ...................................................................................…