二叉树_堆
目录
一. 树(非线性结构)
1.1 树的概念与结构
1.2 树的表示
二. 二叉树
2.1 二叉树的概念与结构
2.2 特殊的二叉树
2.3 二叉树的存储结构
三. 实现顺序结构的二叉树
3.1 堆的概念与结构
一. 树(非线性结构)
1.1 树的概念与结构
概念:属于非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
• 有一个特殊的结点,称为根结点,根结点没有前驱结点。• 除根结点外,其余结点被分成 M(M>0) 个互不相交的集合 T1、T2、……、Tm ,其中每一 个集合Ti(1 <= i <= m) 又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱结点,可以有 0 个或多个后继。因此,树是递归定义的。
上面那个就是一个树的结构,A就是那个特殊的结点,叫做根结点。而且每一个子树的根节点有且只有一个前驱,可以有0个或者多个后继。需要注意的是,树形结构中,子树之间不能有交集,否则就不是树形结构;子树是不相交的(如果存在相交就是图了,图以后得课程会有讲解);除了根结点外,每个结点有且仅有一个父结点,一棵N个结点的树有N-1条边。
1.2 树的表示
树的相关术语:
- 父结点/双亲结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
- 子结点/孩子结点:一个结点含有的子树的根结点称为该结点的子结点;
- 结点的度:一个结点有几个孩子,他的度就是多少;
- 叶子结点/终端结点:度为 0 的结点称为叶结点;
- 分支结点/非终端结点:度不为 0 的结点;
- 兄弟结点:具有相同父结点的结点互称为兄弟结点(亲兄弟);
- 结点的层次:从根开始定义起,根为第 1 层,根的子结点为第 2 层,以此类推;
- 树的高度或深度:树中结点的最大层次;
- 结点的祖先:从根到该结点所经分支上的所有结点;
- 路径:一从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列;
- 子孙:以某结点为根的子树中任⼀结点都称为该结点的⼦孙;
- 森林:由 m(m>0) 棵互不相交的树的集合称为森林;
树的表示:
树的基本形式我们已经知道了,相对于线性结构树的结构确实会复杂很多,我们要如何去表示树?要用什么方法去表示?对于树的表示方法我们其实有很多,比如双亲表示法、孩子表示法、孩子兄弟表示法等,但其实我们最常用的还是孩子兄弟表示法。
struct TreeNode
{
struct Node* child; // 左边开始的第⼀个孩⼦结点
struct Node* brother; // 指向其右边的下⼀个兄弟结点
int data; // 结点中的数据域
};
上面的是我们利用结构体写出的树的结构,利用了孩子兄弟表示法,具体是什么思路,下面我会给大家详细解释,如图:
上面通过图片的形式表示出来,大家可能会更清楚一点,首先树中的每一个结点都是一样的结构,有孩子和兄弟,就拿上图来说,首先A的孩子结点指向B,同时B的兄弟结点指向C,这样就可以满足B和C的父节点是A,与树的形状一致,同理B的孩子结点指向D,D的兄弟结点再指向E,E的兄弟结点再指向F,以此类推,我们就可以利用这个方法完成数的结构了。其实也是很好理解的。
数的实际应用场景:对于数的结构,虽然有些许复杂,但是在实际生活中还是有很多用处的,比如我们最常见的电脑磁盘,每一个文件下可能有多个文件,在这些子文件中可能还有很多文件,这样的结构其实就是和数的结构基本是一致的。
二. 二叉树
2.1 二叉树的概念与结构
数的结构是有些许复杂的,可能每一个结点可能会有不一样数量的孩子结点等,可能数量会非常多,所以我们来介绍一种比较常用的类型,叫做二叉树。

从上图可以看出二叉树具备以下特点:1. 二叉树不存在度大于 2 的结点;2. 二叉树的子树有左右之分,次序不能颠倒,因此 二叉树是有序树 ;
对于任何的二叉树都是由下面几种复合而成的:
2.2 特殊的二叉树
满二叉树:

完全二叉树:

💡 二叉树性质根据满二叉树的特点可知:1)若规定根结点的层数为 1 ,则一棵非空二叉树的第i层上最多有 2^( i−1 )^个结点;2)若规定根结点的层数为 1 ,则深度为 h 的二叉树的最大结点数是 2^h − 1;3)若规定根结点的层数为 1 ,具有 n 个结点的满二叉树的深度 h = log2 (n + 1) ( log以2为底, n+1 为对数);
2.3 二叉树的存储结构

三. 实现顺序结构的二叉树
3.1 堆的概念与结构
现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。堆是一种特殊的二叉树,具备二叉树的性质以为,还有一些其他的性质。
堆其实结构上与二叉树是相同的,但是堆有小堆和大堆之分,当孩子结点始终要大于或等于父结点的时候,我们称之为小堆;相反,当父结点始终大于或等于孩子结点的时候,我们称之为大堆;
堆具有以下性质
• 堆中某个结点的值总是不大于或不小于其父结点的值;• 堆总是一棵完全二叉树;💡 二叉树性质• 对于具有 n 个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有结点从0 开始编号,则对于序号为 i 的结点有:1. 若 i>0 , i 位置结点的双亲序号: (i-1)/2 ; i=0 , i 为根结点编号,无双亲结点;2. 若 2i+1<n ,左孩子序号: 2i+1 , 2i+1>=n 否则无左孩子;3. 若 2i+2<n ,右孩子序号: 2i+2 , 2i+2>=n 否则无右孩子;
本篇主要详细的讲了关于数的概念和结构,只有我们清楚了数的结构,是通过什么方法来实现的,我们在后续的学习中才会更加得心应手,后面一篇我会给大家详细讲解堆的实现,以及堆的向上调整法和向下调整法。
相关文章:

二叉树_堆
目录 一. 树(非线性结构) 1.1 树的概念与结构 1.2 树的表示 二. 二叉树 2.1 二叉树的概念与结构 2.2 特殊的二叉树 2.3 二叉树的存储结构 三. 实现顺序结构的二叉树 3.1 堆的概念与结构 一. 树(非线性结构) 1.1 树的概念与结构 概念ÿ…...

word文档中有大量空白行删除不掉,怎么办?
现象: 分页之间的空白行太多了( 按回车没用。删除也删除不掉 ) 解决办法: 按ctrl a 全选这个文档右击鼠标,点击【段落】选择【换行和分页】,然后把【分页】里的选项全部勾掉,然后点击【确定】…...

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …...

构建高性能异步任务引擎:FastAPI + Celery + Redis
在现代应用开发中,异步任务处理是一个常见的需求。无论是数据处理、图像生成,还是复杂的计算任务,异步执行都能显著提升系统的响应速度和吞吐量。今天,我们将通过一个实际项目,探索如何使用 FastAPI、Celery 和 Redis …...

永磁同步电机无速度算法--全阶滑模观测器
一、原理介绍 在采用传统滑模观测器求取电机角度时通常存在系统抖振、低通滤波器导致角度相位滞后、角度的求取等问题。针对上述问题,本文采用全阶滑模观测器,该全阶滑模观测器具有二阶低通滤波器的特性,能有效滤除反电动势中的高频噪声&…...
部署开源大模型的硬件配置全面指南
目录 第一章:理解大型模型的硬件需求 1.1 模型部署需求分析 第二章:GPU资源平台 2.1 免费GPU资源 2.1.1 阿里云人工智能PAI 2.1.2 阿里天池实验室 2.1.3 Kaggle 2.1.4 Google Colab 2.2 付费GPU服务 2.2.1 AutoDL 2.2.2 Gpushare Cloud 2.2.3 Featurize 2.2.4 A…...

三、使用langchain搭建RAG:金融问答机器人--检索增强生成
经过前面2节数据准备后,现在来构建检索 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings import os# 定义 Embeddings embeddings HuggingFaceEmbeddings(model_name"m3e-base")#…...

Day13 用Excel表体验梯度下降法
Day13 用Excel表体验梯度下降法 用所学公式创建Excel表 用Excel表体验梯度下降法 详见本Day文章顶部附带资源里的Excel表《梯度下降法》,可以对照表里的单元格公式进行理解,还可以多尝试几次不同的学习率 η \eta η来感受,只需要更改学习率…...
计算机组成原理的学习笔记(5)--数据的表示与运算·其四 浮点数的储存和加减/内存对齐/大端小端
学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。 1. 浮点数的表示与运算 规格化数: 浮点数的存储格式为 ,其中: 为符号位。 为尾数,通常在0和1之间(规格化形式为1.xx…...

华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动
华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…...
如何使用 Flask 框架创建简单的 Web 应用?
Flask是一个轻量级的Web应用框架,用Python编写,非常适合快速开发和原型设计。 它提供了必要的工具和技术来构建一个Web应用,同时保持核心简单,不强制使用特定的工具或库。 二、创建第一个Flask应用 安装Flask 首先,…...

将Minio设置为Django的默认Storage(django-storages)
这里写自定义目录标题 前置说明静态文件收集静态文件 使用django-storages来使Django集成Minio安装依赖settings.py测试收集静态文件测试媒体文件 前置说明 静态文件 Django默认的Storage是本地,项目中的CSS、图片、JS都是静态文件。一般会将静态文件放到一个单独…...

sed | 一些关于 sed 的笔记
sed 总结 sed 语法sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]--- 参数:-e<script> 以选项中指定的script 来处理输入的文本文件-f<script文件> 以选项中指定的script 文件来处理输入的文本文件-n 禁用 pattern space 的默认输出…...

wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新
背景: 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。 材料: wtformsflask_sqlalchemy 制作: 上代码 1、模型代码 from .exts import db from …...

AI的进阶之路:从机器学习到深度学习的演变(三)
(承接上集:AI的进阶之路:从机器学习到深度学习的演变(二)) 四、深度学习(DL):机器学习的革命性突破 深度学习(DL)作为机器学习的一个重要分支&am…...
thinkphp 多选框
视图 <div class"form-group"><label for"c-flag" class"control-label col-xs-12 col-sm-2 col-md-4">{:__(Flag)}</label><div class"col-xs-12 col-sm-8 col-md-8"><!--formatter:off--><select …...

机器学习《西瓜书》学习笔记《待续》
如果说,计算机科学是研究关于“算法”的学问,那么机器学习就是研究关于“学习算法”的学问。 目录 绪论引言基本术语 扩展向量的张成-span使用Markdown语法编写数学公式希腊字母的LaTex语法插入一些数学的结构插入定界符插入一些可变大小的符号插入一些函…...
STM32HAL I2C函数
8.5 使用IIC协议读写EEPROM 硬件方式实现 (HAL库) **HAL_I2C_Mem_Write() :这种方法可以写1个或者多个字节 ** /*** brief 以阻塞模式向指定的内存地址写入数据* param hi2c 指向 I2C_HandleTypeDef 结构体的指针,包含指定 I2C 的配置信息…...

洛谷 P1644 跳马问题 C语言
题目: P1644 跳马问题 - 洛谷 | 计算机科学教育新生态 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图 1 所示。马自左下角 (0,0) 向右上角 (m,n) 跳。规定只能往右跳,不准往左跳。比…...

每天40分玩转Django:实操在线商城
实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models fro…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...