【数据结构-初阶】二叉树(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

《数据结构》宗师级大记忆恢复术 —— 链表

《数据结构》宗师级大记忆恢复术 —— 链表

目录 一. 单链表的定义 二. 单链表的基本操作 1. 单链表的初始化 2. 单链表判空 3. 求表长的操作 4. 按序号查找结点 5. 按值查找表结点 6. 插入结点操作(指定位置) 7. 插入结点操作(指定结点) 8. 删除结点操作 9. 采用头插法建立单链表 10. 采用尾插法建立单链表 三. 双链表的定义 四. 双链表的基本操作 1. 双链表的初始化 2. 双链表的插入 3. 双链表的删除 4. 双链表的销毁 五. 循环链表的定义 1. 循环单链表 2. 循环双链表 六. 静态链表的定义 七. 顺序表和链表的区别 1.

By Ne0inhk
前缀和算法专题(2)

前缀和算法专题(2)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-ZEEKLOG博客 所属专栏: 优选算法专题 对于 "前缀和" 不是很了解的小伙伴一定要去看下面这篇博客:前缀和算法的介绍 目录 560. 和为K 的子数组 974. 和可被K整除的子数组 525. 连续数组 1314. 矩阵区域和 560. 和为K 的子数组 题目: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1:输入:nums = [1,1,1], k = 2 输出:2 示例 2:

By Ne0inhk
Flutter 三方库 sm_crypto 的鸿蒙化适配指南 - 实现国产密码算法 SM2/SM3/SM4 的端侧加解密、支持数字签名与国密 SSL 安全通信实战

Flutter 三方库 sm_crypto 的鸿蒙化适配指南 - 实现国产密码算法 SM2/SM3/SM4 的端侧加解密、支持数字签名与国密 SSL 安全通信实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 sm_crypto 的鸿蒙化适配指南 - 实现国产密码算法 SM2/SM3/SM4 的端侧加解密、支持数字签名与国密 SSL 安全通信实战 前言 在进行针对中国市场的 Flutter for OpenHarmony 企业级或政务级应用开发时,支持国产密码算法(国密)是硬性的合规要求。sm_crypto 是一个功能完备的国密算法 Dart 实现库。它涵盖了非对称加密 SM2、哈希摘要 SM3 以及对称加密 SM4。本文将探讨如何在鸿蒙端利用该库构建符合国家标准的安全加密体系。 一、原原理性解析 / 概念介绍 1.1 基础原理 sm_crypto 严格遵循国家密码管理局发布的 GM/

By Ne0inhk
Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战

Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战 前言 在进行 Flutter for OpenHarmony 开发时,确保数据的一致性与安全性是业务上线的先决条件。无论是对用户密码进行加盐哈希存储、验证下载文件的完整性,还是为分布式信令生成 API 签名,都离不开严谨的加密算法支持。crypto 是 Dart 官方生态中用于处理哈希与摘要的核心工具库。本文将探讨如何在鸿蒙端构建极致、稳健的加密算法基石。 一、原直观解析 / 概念介绍 1.1 基础原理 该库提供了一系列纯 Dart 实现的一致性哈希算法(Hash Algorithims)。它通过将任意长度的输入映射为固定长度的二进制摘要(Digest)。支持流式处理(Chunked processing),即允许在读取大文件时分批次泵送数据。在鸿蒙端。它是“

By Ne0inhk