【数据结构-初阶】二叉树(1)---树的相关概念

【数据结构-初阶】二叉树(1)---树的相关概念

🎈主页传送门:良木生香

🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离

上期回顾:在上一篇文章中(这是文章链接:【数据结构-初阶】详解线性表(5)---队列),我们学习了初阶数据结构中的后一个线性表---队列,那么在初阶线性结构中线性表的内容我们就告一段落了,今天我们就进入到初阶段数据结构中的非线性表这块知识的学习.在这块知识中,我们会学习到树,但是还不学习图,这会等到我们学习C++语言的时候详细讲解

目录

一、树的相关概念

1.树的概念与结构:

2、树的相关术语

3、树的表示方法

4、树形结构在生活中的具体应用:


 

在学习二叉树之前,我们要先了解一下什么是树

一、树的相关概念

讲到树,我们就能联想到平时生活中所看到的植物树,那我们今天要讲的树与平时看到的树有联系吗?有的兄弟,当然有,我们今天要将的树灵感就是来源于生活中的树

生活中的树根是在地下的,分支是朝天上生长的,所以我们说树是向阳而生的,而我们今天要讲的树长这样:

1.树的概念与结构:

树是一种非线性的数据结构,与前面讲的线性表不同,它是由n(n>=0)个有限节点组成一个具有层次关系的集合.我们将其称之为树是因为它看起来像是一颗倒挂的树,也就是说根是朝上的,叶子结点是朝下的.
  • 它有一个特殊的节点,叫做根节点,这个节点是没有前驱节点的
  • 除了根节点之外,剩下的其他节点被分成M(M>0)个互不相交的集合,T1,T2,T3.....Tm.其中一个集合Ti(1<Ti<M)又是一颗结构与树类似的子树.每棵子树的根节点有且只会有一个前驱,可以有0个或者多个后驱,因此,树是递归定义的.
小贴士:树形结构中,子树不能有交集,否则不是树形结构

非树形结构的像下面这样:

  • 标有问号的就是子树中有交集的,这样就不是树形结构了,如果相交了,那就是图,不是树了
  • 除了根节点之外,其他节点有且仅有一个父节点
  • 一颗N节点的树有N-1条边

 

2、树的相关术语

介绍树的相关术语,我们就拿下面这张图做例子:

父节点/双亲节点:若一个节点含有子节点,那么这个节点成为其子节点的父节点;像上图中,A是B的父节点;

子节点/孩子节点:一个结点含有的子树的根节点成为该节点的子结点;像上图中,B是A的子结点/孩子节点

结点的度:一个结点有几个孩子,那他的度就是多少;比如A的度是6,F的度是2的等等...

树的度:一棵树中,最大结点的度称为树的度,如上图:树的度为6

叶子结点/终端结点:度为0的结点成为叶结点,如上图:B、C、H、I...等等

分支结点/非终端结点:度不为0的结点,像上图中的D、E、F、G...

兄弟结点:具有相同父结点的结点互相称为兄弟结点(亲兄弟),像上图中的B、C是兄弟结点

结点的层次:从根开始定义起,根为第1层,跟的子结点是第2层,以此类推;

树的高度或者深度:树中结点的最大层次;像上图中的树的高度为4;

结点的祖先:从根到该结点所经分支上的所有结点;像上图中,A是所有节点的祖先;

路径:一条从树任意结点出发,沿父结点-子结点连接,达到任意结点的序列;比如A到Q的路径为:A-E-J-Q;H到Q的路径为:H-D-A-E-J-Q

子孙:以某个结点为根的子树中任以结点都称为该节点的子孙.像上图中:所有节点都是A的子孙;

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

 

3、树的表示方法

树结构相对线性表就⽐较复杂了,要存储表⽰起来就⽐较⿇烦了,既然保存值域,也要保存结点和结 点之间的关系,实际中树有很多种表⽰⽅式如:双亲表⽰法,孩⼦表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。

在这么多方法里面,我们应该怎么选择哪个方法作为我们讲解的方法呢?我们选择孩子兄弟表示法,这也是前辈们在最初探索树的时候想出来的,因为这种方法比较容易我们理解

下面是树的结构体:

struct TreeNode { struct Node* child; // 左边开始的第⼀个孩⼦结点 struct Node* brother; // 指向其右边的下⼀个兄弟结点 int data; // 结点中的数据域 };

怎么理解这个结构体呢?不着急,请看下图:

我们以这个图为例,那么这棵树在结构体中的具象化就应该是这样子的:

 

4、树形结构在生活中的具体应用:

树形结构在生活中有许多的应用,拿个最简单的例子来说,就像我们电脑上的文件管理器,就是树形结构的应用,文件管理都是一层一层向下管理的:

以上就是我对树的概念内容的分享了,感谢大佬们的阅读~~~~

 

文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读.

Read more

Windows 家庭版安装 Docker 超详细教程(附避坑指南)

Windows 家庭版安装 Docker 超详细教程(附避坑指南)

一、Windows系统搭建Docker 1.1 启用虚拟化 任务管理器(CTRL+Shift+Esc), 选择性能,查看CPU虚拟化,确认是否已启用(默认启用)。 1.2 安装虚拟机并开启Hyper-V功能、虚拟机功能。 1.2.1 windows专业版,不需要 执行 123.cmd 1.2.2 Win10家庭版 因为Win10家庭版没有安装虚拟机,所以通过新建123.cmd安装一个Hyper-V 新建一个123.cmd文件,并将如下内容复制进去 pushd"%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for

By Ne0inhk
【Linux指南】用户与系统基础操作

【Linux指南】用户与系统基础操作

引言 在 Linux 系统的世界里,用户管理与系统监控如同打开操作系统大门的两把基础钥匙,是每位学习者必须掌握的核心技能。无论是远程登录服务器进行管理,还是创建删除用户以规范权限体系,亦或是通过系统命令实时监控服务器状态,这些操作都构成了 Linux 系统管理的基石。 本文将从用户登录、创建与删除的基础操作出发,深入解析系统信息查看工具的使用技巧,帮助读者构建从实操到理论的完整知识框架,为后续深入学习 Linux 系统管理奠定坚实基础。 文章目录 * 引言 * 一、用户管理三剑客:登录、创建与删除 * 1. 用户登录:ssh远程连接服务器 * 2. 新建用户:adduser与passwd * 3. 删除用户:userdel的谨慎操作 * 二、系统信息查看:从内核到进程的全面监控 * 1. uname:查看系统基础信息 * 2. sar:查看系统性能 * 3. top:实时进程监控的任务管理器 * 结语 一、用户管理三剑客:登录、

By Ne0inhk
Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断

Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 talker_chopper_logger 的鸿蒙化适配指南 - 实现 Chopper 网络层与 Talker 日志系统的深度集成、支持响应式 HTTP 监控与自动化错误诊断 前言 在进行 Flutter for OpenHarmony 的网络层开发时,使用 Chopper 作为 HTTP 客户端是非常成熟的选择。然而,如何优雅地监控、记录并调试复杂的网络请求(特别是处理鸿蒙端侧的异构网络环境)是一个痛点。talker_chopper_logger 是专为集成 Talker 日志监控而设计的插件。本文将探讨如何在鸿蒙端构建可视化、可交互的网络请求监控日志系统。 一、原理解析 / 概念介绍 1.1 基础原理

By Ne0inhk
工业平台选型指南:权限、审计与多租户治理——用 Apache IoTDB 把“数据可用”升级为“数据可控”

工业平台选型指南:权限、审计与多租户治理——用 Apache IoTDB 把“数据可用”升级为“数据可控”

很多 TSDB 选型只关注“存得下、查得快”,但一旦系统进入平台化阶段(多个工厂/多个业务/外部协作),真正的难点会转向“权限、审计、隔离与治理”。本文用工程视角讨论这些能力该怎么评估,并结合 IoTDB 的路径模型给出落地方式。 1. 为什么平台化之后,TSDB 的评估重点会变? 在 PoC 阶段,你可能只需要满足: 但当系统进入“平台化”(多条产线、多家工厂、多个团队共用数据底座)时,需求会发生明显变化: * 权限与隔离:A 工厂的数据不能被 B 工厂看到;同一工厂内不同角色权限不同 * 审计与追责:谁查了哪些数据、谁改了哪些配置、谁做了删除操作,要能追踪 * 配额与成本控制:某团队写入量暴涨不能拖垮全局;热数据与冷数据要分层治理 * 数据治理:命名规范、schema 演进、

By Ne0inhk