树之基本概念(有图头真相)

news2025/1/17 21:34:31

文章目录

  • 树的概念及结构
    • 1.树的概念
    • 2.树的相关概念
    • 3.树的表示
    • 4.树在实际中的应用

树的概念及结构

1.树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的

  • 有一个特殊的结点,称为根结点,根节点没有前驱结点
  • 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1**、T2……、**Tm,其中每一个集合Ti(1<= i
    <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
  • 因此,树是递归定义的。

正常的树:

在这里插入图片描述

数据结构中的树:

在这里插入图片描述

在这里插入图片描述

2.树的相关概念

在这里插入图片描述

树形结构中,子树之间不能相交,否则便不是树形结构
一个树可以看成根节点和多棵子树,多颗子树又可以看出一个全新的树,分为根节点和多颗子树



在这里插入图片描述

  • 节点的度:一个节点含有的子树的个数成为该节点的度;例如上图中:A的度为 6 ,E的度为 2

  • 叶子节点(终端节点):度为0的节点,好比:真实的树叶子后面就没有东西了,所以叫叶子节点或终端节点,例如上图中的: B C H I … …

  • 分支节点(非终端节点):度不为0的节点,好比:真实的树后面还有东西它肯定是树干,不可能是叶子,所以叫分支节点或非终端节点,例如上图: A D E F … …

  • 双亲节点(父节点):若一个节点后面还有节点,那么它就叫做这个节点的父节点;例如:D是H的父节点

  • 孩子节点(子节点):如果一个节点有父节点,那么他就是这个父节点的子节点;例如: B是A的子节点

  • 树的度: 一棵树,最大节点的度就是这颗树的度;上图树的度就是6

  • 节点的层次: 从根节点定义起,根为第1层,根的子节点为第2层,依次递推

  • 树的高度或深度:现实生活中,我们把树用高度定义,数据结构中树反过来了,所以我们又多了一种定义的方法用深度表示高度;树中最大的层次叫做树的高度或深度;上图中树的高度:4

  • 节点的祖先:从根到该节点所走过的所有节点;例如:Q的祖先->A->E->J

  • 兄弟节点:具有相同父节点的节点成为兄弟节点;例如:I 和 J就是兄弟节点

  • 堂兄弟节点:这两个节点的双亲互为亲兄弟;例如:H和I就是堂兄弟

  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

  • 森林:由m(m>0)棵互不相交的树的集合称为森林 ;

注:

1、一个子节点只能有一个父节点,但是一个父节点可以有多个子子节点,就好比现实生活

2、这些只是概念,只要知道他们各自代表啥意思就好,加粗的重点记忆

3.树的表示

树形结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系

大家是不是觉得用链表存储就可以了,但是,一个树的度不确定,你如何规定结构体中孩子指针的个数呢?

typedef int DataType;
struct Node
{
	DataType data; // 结点中的数据域
	struct Node* child1;
	struct Node* child2;
	struct Node* child3;
};

这样写,如果有一个节点的度为6,这个结构就错误了。

尽管你知道树的度,也不好表示

在这里插入图片描述

你知道它的度为3,但是有些度又为1,你定义三个孩子指针不就浪费了。

这些我们都不用思考了,有大神给我们想出来如何解决了,我们只管使用就好。

实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。

我们这里就简单的了解其中最常用的孩子兄弟表示法

typedef int DataType;
struct Node
{
	struct Node* _firstChild1; // 第一个孩子结点
	struct Node* _pNextBrother; // 指向其下一个兄弟结点
	DataType _data; // 结点中的数据域
};

在这里插入图片描述

怎么样,是不是觉得好巧啊,自己怎么想不出来呢?大神嘛,还是很少的,万里挑一。

用这中方法不管你的度是多少,我都只用两个指针就可以表示完了。

4.树在实际中的应用

在这里插入图片描述

著名的Linux系统,它的目录结构就是树形结构。

Windows中的存储结构是森林。

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

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

相关文章

高项 干系人管理论文

4个过程&#xff1a; 1&#xff0c;识别干系人&#xff1a;识别能影响项目决策、活动或结果的个人、群体或组织&#xff0c;以及被项目、活动或者结果影响的个人、群体或者组织&#xff0c;并分析和记录他们的相关信息的过程。这些信息包括他们的利益、参与度、互相依赖、影响…

PDF怎么编辑文字?教你两招非常实用的方法

怎么在PDF文件上直接编辑文字呢&#xff1f;相信这是大家在刚接触PDF文件不久时发出的疑问。在发现文件中有需要改正的地方&#xff0c;想要编辑时发现编辑不了&#xff0c;出现这种情况时应该怎么办呢&#xff1f;今天教大家两种非常简单实用的方法&#xff0c;有需要的小伙伴…

《元宇宙工程》南京首发 落地实用是关键

2022年11月20日上午&#xff0c;由江苏省人工智能学会、南京信息工程大学人工智能学院&#xff08;未来技术学院&#xff09;、中国移动通信联合会元宇宙产业工作委员会联合主办&#xff0c;由南京信息工程大学元宇宙研究院、江苏省人工智能学会元宇宙专委会&#xff08;筹&…

PMP考前最后2天思路整理

1 问题解决的思路&#xff0c;先分析&#xff0c;再行动。要直接、要直面。要有担当&#xff0c;要有作为&#xff0c;敢负责任。 2 风险管理里面的三个文件一定要分清楚&#xff1a;风险管理计划、风险登记册和风险报告。风险应对的五种方法每个是什么。各自在书里面举的例子…

NAND闪存改变了现代生活

1989年 我出生了&#xff0c; 额&#xff0c;扯远了。 1989年NAND闪存面世了&#xff0c;它曾经且正在改变了我们的日常生活。 NAND 闪存发明之所以伟大&#xff0c;是因为&#xff0c;有了这项颠覆性的发明&#xff0c;才有了我们现如今用的智能手机的高速大容量内存(eMMC、UF…

react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题

文章目录react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题需求问题问题根源部分代码参考react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题 需求 项目中使…

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm足球赛会管理系统》 该项目分为2个角色&#xff0c;管理员、用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、球队介绍、球星介绍、线下足球、赛论坛信…

Revit中项目的正负零零,尺寸标注,标注生成问题

一、 Revit中如何改变项目的正负零零 有时候&#xff0c;在一个项目中&#xff0c;我们要改变项目的 正负零零&#xff0c;如下图 第一步&#xff0c;打开视图的“可见性/图形”&#xff0c;如图2 第二步&#xff0c;在“可见性/图形替换”中勾选“项目基点”&#xff0c;如图 …

TK爆品剖析 水晶首饰降临节日历持续火爆TikTok,独立站卖到断货

圣诞节是年末促销旺季的关键节点&#xff0c;很多商家都会推出圣诞主题礼物产品&#xff0c;比如圣诞树、圣诞贺卡、圣诞老人等等&#xff0c;但很少会推出降临节日历。 其实&#xff0c;“降临节日历”一直是人们在圣诞节前最喜欢的礼物。谷歌趋势显示&#xff0c;2021年圣诞节…

[Spring Cloud] Ribbon介绍与定义负载均衡

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

QXlsx 使用

QXls使用分两种方式&#xff1a; 1 直接加载pri文件&#xff0c;就可以使用&#xff1b;2 编译后作为Qt的模块加载使用&#xff1b; 此文章主要针对第二种使用方式做记录&#xff0c;该方式又分为两种编译器进行说明&#xff1a; 第一种&#xff0c;使用MinGW64位编译器&…

nginx部署web项目(跟着搞不出来,来砍我)

前端打包成dist&#xff0c;详情可以参考我的vue博客 vue速学_我要用代码向我喜欢的女孩表白的博客-CSDN博客 nginx下载地址:nginx1.16.1离线安装包_nginx1.16.1依赖-Web服务器文档类资源-CSDN下载 &#xff08;如果报错缺少依赖&#xff0c;可以参考我的nginx-rtmp直播流博客…

文献阅读01_基于深度学习的个性化新闻推荐方法研究_20221114

论文信息 Subjects:新闻推荐;长短期用户表示;多视角学习;联合学习; &#xff08;1&#xff09;题目&#xff1a;Attention Is All You Need &#xff08;你需要的就是关注&#xff09; &#xff08;2&#xff09;文章下载地址&#xff1a;https://kreader.cnki.net/Kreader/Ca…

行业安全解决方案|腾讯打造汽车一体化安全防护,助力车企数字化安全

随着汽车智能化的发展&#xff0c;车联网、自动驾驶、车路协同等应用快速落地&#xff0c;汽车作为智能终端所产生的数据成指数级增长态势。然而&#xff0c;当汽车行业数字化转型正如火如荼进行时&#xff0c;新的安全挑战也接踵而至&#xff0c;车企甚至可能因忽视安全建设&a…

(八)centos7案例实战——docker仓库Harbor服务安装部署

前言 Harbor &#xff08;港口&#xff0c;港湾&#xff09;是一个用于存储和分发Docker镜像的企业级Registry服务器。我们可以使用dockerhub仓库或者阿里云docker仓库等第三方仓库管理我们的docker镜像。对于企业来说&#xff0c;条件允许&#xff0c;可以搭建自己的docker镜…

FEDformer 代码分析(1)

参数设置如下&#xff0c; --seq_len 是 96 --label_len 是 48 --pred_len 是 96 也就是说&#xff0c;输入是96的&#xff0c;预测96. batch_x 是 &#xff08;1,96,7&#xff09;的维度的。 batch_x_mark 是&#xff08;1,96,4&#xff09;的维度的。 batch_y的维度是…

嵌入式系统开发笔记107:层次化软件设计思想

文章目录前言一、嵌入式系统设计的本质二、基于寄存器结构的程序设计三、嵌入式系统优良程序的评判标准四、计算机上的软件分层五、嵌入式程序的分层设计前言 本文以思维导图的形式介绍层次化软件设计思想。 一、嵌入式系统设计的本质 二、基于寄存器结构的程序设计 三、嵌入式…

Java 内存溢出(一)原因、复现、排查

目录一、内存溢出原因二、内存溢出实例1、堆溢出2.虚拟机栈和本地方法栈溢出3.方法区和运行时常量池溢出4.本机直接内存溢出三、内存溢出排查内存溢出&#xff1a; 是指应用系统中存在无法回收的内存或使用的内存过多&#xff0c;最终使得程序运行要用到的内存大于虚拟机能提供…

[附源码]计算机毕业设计JAVA基于新高考模式下的排课系统

[附源码]计算机毕业设计JAVA基于新高考模式下的排课系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; S…

强化学习论文分析5---多基站_强化学习_联邦学习_计算卸载

目录一、文章概述二、理论模型1.系统目标2.约束条件3.公式推导(1)任务量(2)卸载率(3)本地能耗(4)传输能耗(5)MEC计算能耗(6)总述三、算法架构----多基站联合强化学习1.网络结构图2.算法总述3.Actor网络(1).输入状态(2).输出动作4.Critic网络(1).环境奖励5.伪代码四、算法架构--…