数据结构——树——二叉树——大小堆

目录
1>>导言
2>>树
2.1>>树的相关术语
2.2>>树的表示和应用场景
3>>二叉树
3.1>>完全二叉树
3.2>>大小根堆
4>>结语
1>>导言
上篇小编将队列的内容给大家讲完了,这篇要步入新的篇章,请宝子们做好上高速的准备,随我一起上高速~今天来讲树的概念,满二叉树,完全二叉树以及堆的概念,还要手动实现堆的代码,废话不多说,系好安全带。
2>>树
树是一种非线性的数据结构,这是何意?就是它的物理结构和逻辑结构都不是连续的,那为什么把它叫做树,不叫什么草、花呢?这就要来看看它的结构了:

这里能看到整个结构像是一颗倒挂的树,因此,我们把它叫做树。
最上面的结点叫做根结点,每个结点都有一个前驱结点和若干个后继结点。
每个结点指向的一块区域称作子树,两个不同子树之间不能相交,如:

子树1的结点不能和子树2相连,否则就是图数据结构了,这个后面学到会说。
如这张图,也就是说,一个结点只能有一个前驱结点。
2.1>>树的相关术语

父结点/双亲结点:若⼀个结点含有子结点,则这个结点称为其子结点的父结点;如上图:A是B的父结点
子结点/孩子结点:⼀个结点含有的子树的根结点称为该结点的子结点;如上图:B是A的孩子结点
结点的度:⼀个结点有几个孩子,他的度就是多少;比如A的度为3,F的度为0
树的度:⼀棵树中,最大的结点的度称为树的度;如上图:树的度为3
叶子结点/终端结点:度为 0 的结点称为叶结点;如上图: J、F、K等结点为叶结点
分支结点/非终端结点:度不为 0 的结点;如上图:B、E、G等结点为分支结点
兄弟结点:具有相同父结点的结点互称为兄弟结点(亲兄弟);如上图: B、C 是兄弟结点
结点的层次:从根开始定义起,根为第1层,根子节点为第2层;上图 J 为第四层
结点的高度或者深度:树中结点的最大层次;如上图:树高度为4
结点的祖先:从根到该节点所经分支上的所有结点;如上图:A是所有结点的祖先
路径:一条从树中任意结点出发,沿父节点-子节点链接,达到任意结点的序列;比如A到K路径为A-C-G-K
子孙:以某节点为根的子树中任一结点都称为该节点的子孙;如上图,所有结点都是A的子孙
森林:有很多棵互不相交树的集合称为森林
2.2>>树的表示和应用场景
一般使用兄弟孩子表示法,就是孩子child指向孩子结点,brother兄弟指向右边那个结点。

我们的硬盘存储就是树应用的一种,根结点为c盘/d盘,里面一个一个文件夹就是分支,到文件就是叶子结点
3>>二叉树
二叉树具备一下两点:
1.二叉树不存在度大于2的结点
2.二叉树的子树有左右之分,不能颠倒,因此二叉树也是有序树

以上为二叉树的各种存在形式
这是现实中的二叉树,这一棵还是满二叉树,也就是说除了叶子结点,所有结点都有两个度。
对大家来说,满二叉树太难见到了,因此我们引申出了一个完全二叉树
3.1>>完全二叉树
完全二叉树除了叶子结点的上一个分支结点,其余所有结点都有两个度
这是什么意思呢?

来看这张图或许你就懂了。注意:这里的叶子结点必须从左到右有,不能3和5有叶子结点,而4位置是空的。
3.2>>大小根堆
堆是什么意思呢?就是在完全二叉树的基础上,在加上对数据的处理:
如图的小根堆,根部数据最小,因此得名小根堆,也叫小堆。小堆每个结点的数据均不小于其父节点的值。

如图的大根堆,根部数据最大,因此得名大根堆,也叫大堆。大堆每个结点的数据均不大于其父节点的值。
再来看它们的位置关系:
根据逻辑结构和存储结构能看出来双亲结点parent和孩子结点child的对应关系:
双亲:parent =(child-1)/2;
左孩子:leftchild=parent*2+1;
右孩子:rightchild=parent*2+2;
注意:(child-1)/2为0时无双亲结点。parent*2+1>=n无左孩子结点。parent*2+2>=n无右孩子结点
n表示有n个结点
4>>结语
今天讲了树的相关概念和术语,二叉树的概念,二叉树的分类,还有堆的位置关系。希望宝子们能在本篇文章有所收获,能帮助到宝子们小编就非常开心啦。希望明天还能看到宝子们,明天跟着小编一起实现堆的代码吧。敬请期待...
相关文章:
数据结构——树——二叉树——大小堆
目录 1>>导言 2>>树 2.1>>树的相关术语 2.2>>树的表示和应用场景 3>>二叉树 3.1>>完全二叉树 3.2>>大小根堆 4>>结语 1>>导言 上篇小编将队列的内容给大家讲完了,这篇要步入新的篇章,请宝…...
Android Junit 单元测试 | 依赖配置和编译报错解决
问题 为什么在依赖中添加了testImplement在build APK的时候还是会报错?是因为没有识别到test文件夹是test源代码路径吗? 最常见的配置有: implementation - 所有源代码集(包括test源代码集)中都有该依赖库.testImplementation - 依赖关系仅在test源代码…...
ffmpeg视频滤镜: 裁剪-crop
滤镜简述 crop官网链接 > FFmpeg Filters Documentation crop滤镜可以对视频进行裁剪,并且这个滤镜可以接受一些变量比如时间和帧数,这样我们实现动态裁剪,从而实现一些特效。 滤镜使用 参数 out_w <string> ..…...
身份证归属地查询接口-在线身份证归属地查询-身份证归属地查询API
接口简介:输入身份证号码可查询到所属地区、出生年日月以及性别。 接口地址:https://www.wapi.cn/api_detail/60/167.html 在线核验:https://www.wapi.cn/icard.html 网站地址:https://www.wapi.cn 返回格式:json,xml,…...
ESP32 S3 怎么开发基于ESP-RTC的音视频实时交互的应用,用语AI陪伴的领域
在ESP32-S3平台上开发基于ESP-RTC的音视频实时交互应用,尤其是在AI陪伴领域,涉及到音视频数据的采集、编码、传输和解码。ESP32-S3 具备较强的处理能力,且拥有丰富的接口和模块支持,可以用来实现这种功能。以下是一个完整的开发方…...
车载测试分享:UDS诊断、ECU刷写、CAN一致性测试、网络通讯测试、CANoe使用、报文解析、问题定位分析
FOTA模块中OTA的知识点:1.测试过程中发现哪几类问题? 可能就是一个单键的ecu,比如升了一个门的ecu,他的升了之后就关不上,还有就是升级组合ecu的时候,c屏上不显示进度条。 2.在做ota测试的过程中…...
预算不够,怎么跟KOL砍价?(内附砍价模板)
在当今的数字营销时代,海外红人(KOL)的影响力不容小觑。他们的一篇帖子、一个视频,甚至是一张照片,都有可能为企业带来巨大的流量和销量。 当企业满怀希望地找到一位粉丝众多、影响力强的KOL,准备洽谈合作…...
C#从零开始学习(GameObject实例)(unity Lab3)
这是书本中第三个unity Lab 在这次实验中,将学习如何使用C#编写代码用unity编写C#代码 GameObject实例 本次将完成的工作 将游戏资产配置在文件夹中创建材质把GameObject变成预制件脚本控制游戏防止球体重叠 将游戏资产配置在文件夹中 Script放代码 Prefabs放预制件 MAteria…...
谷歌地图 | 与 Android 版导航 SDK 集成的最佳实践
谷歌最近宣布了导航 SDK,它可以让您将熟悉的 Google 地图逐向导航体验无缝集成到您的 Android 和 iOS 应用程序中。 这篇博文概述了一些最佳实践,您可以使用这些实践为您的 Android 应用程序使用导航 SDK 构建流畅、一致且可靠的导航体验。 与导航地图…...
什么是 VolTE 中的 Slient Redial?它和 CSFB 什么关系?
目录 1. 什么是 Silent Redial(安静的重拨号)? 2. Silent Redial 信令流程概述 3. 总结 Silent Redial 和 CSFB 啥关系? 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习指导都…...
docker 部署单节点的etcd以及 常用使用命令
docker部署etcd $ docker run -d --name etcd-server -p 2379:2379 -p 2380:2380 quay.io/coreos/etcd:v3.5.0 /usr/local/bin/etcd -name my-etcd-1 -advertise-client-urls http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http…...
华为开放式耳机测评,南卡 、华为、Cleer开放式耳机超深度横评
近年来,开放式蓝牙耳机因其独特的设计和优势受到了越来越多消费者的青睐。其实对于开放式耳机,大家都没有一个明确的概念,可能会为了音质的一小点提升而耗费大量的资金,毕竟这是一个无底洞。 作为在过去一年体验过不下20款开放式耳…...
【Power Query】List.Select 筛选列表
List.Select 筛选列表 ——在列表中返回满足条件的元素 List.Select(列表,判断条件) 不是列表的可以转成列表再筛选,例如 Record.ToList 不同场景的判断条件参考写法 (1)单条件筛选 列表中小于50的数字 List.Select({1,99,8,98,5},each _<50) (2)多条件筛…...
Spring--4
SpringWeb 概念 是Spring框架的一个模块,基于Servlet的一个原始Web框架。 SpringWEB 运行流程 描述:前端用户请求发送的后端以后,先经过前端控制器DispatcherServlet(再次之前也可能有过滤器的存在),经过前端控制器解析后&…...
django celery 定时任务 Crontab 计划格式
Celery 定时任务教程 Celery 是一个强大的异步任务队列/作业队列基于分布式消息传递的开源项目。它广泛用于处理各种类型的后台任务,例如发送电子邮件、处理图像、数据分析和视频转换等。 本文将介绍如何使用 Celery 实现定时任务,包括: 安…...
动态应用程序安全测试 (DAST) 工具 Fortify WebInspect
Fortify WebInspect 是一种动态应用程序安全测试 (DAST) 工具,可识别所部署的Web 应用程序和服务中的应用程序漏洞。 OpenText™ 推出的 Fortify WebInspect 是一种自动化DAST 解决方案,可提供全面的漏洞检测能力并有助于安全专业人士和 QA 测试人员识别安全漏洞和…...
深入解析东芝TB62261FTG,步进电机驱动方案
TB62261FTG是一款由东芝推出的两相双极步进电机驱动器,采用了BiCD工艺,能够提供高效的电机控制。这款芯片具有多种优秀的功能,包括PWM斩波、内置电流调节、低导通电阻的MOSFET以及多种步进操作模式,使其非常适合用于需要精确运动控…...
Vue 常用的狗钩子函数
beforeCreate(){ console.log(刚刚创建实例); },created(){console.log(实例创建完成);},beforeMount(){console.log(模板编译之前 ); },mounted(){/* 请求数据,操作Dom时常用 */console.log(实力挂载完成);},beforeUpdate(){console.log(更新前)},update…...
【机器学习基础】激活函数
激活函数 1. Sigmoid函数2. Tanh(双曲正切)函数3. ReLU函数4. Leaky ReLU函数 1. Sigmoid函数 观察导数图像在我们深度学习里面,导数是为了求参数W和B,W和B是在我们模型model确定之后,找出一组最优的W和B,使…...
nnMamba用于糖尿病视网膜病变检测测试
1.代码修改 源码是针对3D单通道图像的,只需要简单改写为2D就行,修改nnMamba4cls.py代码如下: # -*- coding: utf-8 -*- # 作者: Mr Cun # 文件名: nnMamba4cls.py # 创建时间: 2024-10-25 # 文件描述:修改nnmamba,使…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
