⚡️【数据结构】二叉树的概念和相关知识总结

news2025/6/24 7:56:14

🌲目录

1.树概念及结构

1.1树的概念

1.2 树的相关概念

1.3 树的表示

 1.4 树在实际中的运用(表示文件系统的目录树结构)

2.二叉树概念及结构

2.1概念

2.2满二叉树

2.3完全二叉树

2.4满二叉树和完全二叉树的区别

2.5二叉树的性质

2.6二叉树的存储结构

3.二叉树顺序结构

3.1二叉树的顺序结构

3.2堆的概念及结构


1️⃣树概念及结构

❄️1.1树的概念

树是一种 非线性 的数据结构,它是由 n n>=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵 倒挂的树 ,也就是说它是根朝上,而叶朝下的
  • 有一个特殊的结点,称为根结点,根节点没有前驱结点
  • 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1T2……Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
  • 因此,树是递归定义😘

树形结构中,子树之间不能有交集,否则就不是树形结构

❄️1.2 树的相关概念

 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6

叶节点或终端节点:度为0的节点称为叶节点; 如上图:BCHI...等节点为叶节点

非终端节点或分支节点:度不为0的节点; 如上图:DEFG...等节点为分支节点

双亲节点或父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图: A B 的父节点
孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点; 如上图: B A 的孩子节点
兄弟节点 :具有相同父节点的节点互称为兄弟节点; 如上图: B C 是兄弟节点
树的度 :一棵树中,最大的节点的度称为树的度; 如上图:树的度为 6
节点的层次 :从根开始定义起,根为第 1 层,根的子节点为第 2 层,以此类推;
树的高度或深度 :树中节点的最大层次; 如上图:树的高度为4
堂兄弟节点 :双亲在同一层的节点互为堂兄弟;如上图: H I 互为兄弟节点
节点的祖先 :从根到该节点所经分支上的所有节点;如上图: A 是所有节点的祖先
子孙 :以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是 A 的子孙
森林 :由 m m>0 )棵互不相交的树的集合称为森林;

❄️1.3 树的表示

树结构相对线性表就 比较复杂 了,要存储表示起来就比较麻烦了, 既然保存值域,也要保存结点和结点之间 的关系 ,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。 接下来我将用孩子兄弟表示法。
typedef int DataType;
struct Node
{
 struct Node* firstChild1; // 第一个孩子结点
 struct Node* pNextBrother; // 指向其下一个兄弟结点
 DataType data; // 结点中的数据域
}

 ❄️1.4 树在实际中的运用(表示文件系统的目录树结构)

如linux的目录,window的目录等等,基本都是用树状图来表示的。

2️⃣二叉树概念及结构

🌼2.1概念

二叉树的每个节点:或者为或者由一个根节点加上两棵别称为左子树右子树的二叉树组成。

 注意:

  • 二叉树不存在度大于2的节点
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

🌼2.2满二叉树

如果一个二叉树的每个节点的度都为2,即每个节点都有两个分支,那么此二叉树就为满二叉树。其层数如果为k,那么其总节点个数为2^k-1

 

🌼2.3完全二叉树

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

🌼2.4满二叉树和完全二叉树的区别

其实满二叉树是完全二叉树的特例,因为满二叉树已经满了,而完全并不代表满。满指的是出了叶子节点外每个节点都有两个孩子,而完全的含义则是最后一层没有满,并没有满。

  • 满二叉树肯定是完全二叉树
  • 完全二叉树不一定是满二叉树

🌼2.5二叉树的性质

1. 若规定根节点的层数为 1 ,则一棵非空二叉树的 第i层上最多有 个结点.

2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点总数是   .

3. 对任何一棵二叉树 , 如果度为 0 其叶结点个数为 , 度为2的分支结点个数为 ,则有

4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度

5. 对于具有 n 个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从 0 开始编号,则对于序号为i 的结点有:
  •  若i>0i位置节点的双亲序号:(i-1)/2i=0i为根节点编号,无双亲节点
  •  若2i+1<n,左孩子序号:2i+12i+1>=n否则无左孩子
  • 若2i+2<n,右孩子序号:2i+22i+2>=n否则无右孩子

🌼2.6二叉树的存储结构

二叉树的存储结构有两种,分别为顺序存储链式存储

⭐️1.顺序存储

顺序结构存储就是使用 数组来存储 ,一般使用数组 只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。 二叉树顺 序存储在物理上是一个数组,在逻辑上是一颗二叉树。数组的正常顺序和二叉树按从上到下,从左到右的顺序对应。

⭐️2.链式存储

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域, 左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址, 链式结构又分为二叉链和三叉链。

 

3️⃣二叉树顺序结构

💫3.1二叉树的顺序结构

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。 而完全二叉树更适合使用顺序结构存储 现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

💫3.2堆的概念及结构

严格来讲,堆有不同的种类,但是我们在算法学习中,主要用的还是二叉堆,而二叉堆有最大堆和最小堆之分。

最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。

需要注意的问题是:堆中的任一子树也还是堆,即大顶堆的子树也都是大顶堆,小顶堆同样。

 🌊堆的性质:

  • 堆中某个节点总是不大于或者不小于其父节点
  • 堆是完全二叉树

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

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

相关文章

linux日志管理总结,rules详解、轮转详解、实例展示。

概述 ​ 1、日志文件记录系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等 ​ 2、通过日志来检查错误发生的原因&#xff0c;或者受到攻击时攻击者留下的痕迹。 1. rsyslog系统日志管理 1.1 处理日志的程序&#…

工控安全-Modbus重放攻击

文章目录Modbus-重放攻击Modbus-仿真环境(ModSim)Modbus-协议采集(ModbusScan)抓取Modbus/TCP流量使用青云工具进行重放攻击Modbus-重放攻击 Modbus-仿真环境(ModSim) 首先开启Modbus仿真环境 ip地址是10.10.100.11 ModSim32&#xff0c;这个软件是模拟Modbus协议的一个仿真…

git push错误->Error: src refspec master does not match any

参考文章问题描述&#xff1a;在执行命令 git push origin master 时报错->Error: src refspec master does not match any问题分析&#xff1a;在网上查找解决方法&#xff0c;大部分人说是暂存区没有文件&#xff0c;未执行git add 导致出错。但是此时已经执行了git add 操…

将石油和天然气推向边缘

无论是来自在线购物交易还是工业环境中的物联网&#xff08;IoT&#xff09;设备&#xff0c;数据都是不断收集的。幸运的是&#xff0c;世界各地的每一个行业都可以利用这一趋势&#xff0c;许多行业都已经这样做了。在石油和天然气行业&#xff0c;持续的数据通信是现在保持完…

JavaScript刷LeetCode-字符串类解题技巧

序章 我们把字符串、数组、正则、排序、递归归为简单算法。接下来系列里&#xff0c;将系列文章里将为大家逐一介绍。 字符串 翻转字符串中的单词 给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。示例 1: 输…

数据库和SQL介绍

数据库管理系统&#xff08;数据库软件)那么如何实现这种数据库形式的数据管理呢?我们需要借助:数据库管理系统&#xff0c;也就是常说的数据库软件。数据库软件是非常多的&#xff0c;常见的有:这些软件都能实现︰管理库﹑管理表、基于表来管理数据数据库和SQL的关系数据库是…

Java 诊断利器 Arthas 快速入门

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

ORB-SLAM2 --- LocalMapping::KeyFrameCulling函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 检测当前关键帧在共视图中的关键帧&#xff0c;根据地图点在共视图中的冗余程度剔除该共视关键帧。 冗余关键帧的判定&#xff1a;90%以上的地图点能被其他关键帧&#xff08;至少3个&#xff09;观测到。 2.code /*** brie…

第七次作业部分

文章目录1、获取根分区剩余大小2、获取当前机器ip地址3、统计出apache的access.log中访问量最多的5个IP4、打印/etc/passwd中UID大于500的用户名和uid5、/etc/passwd 中匹配包含root或net或ucp的任意行6、处理以下文件内容,将域名取出并根据域名进行计数排序处理(百度搜狐面试题…

透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。

1、粘包与半包 啥也不说了&#xff0c;直接上代码是不是有点不太友好&#xff0c;我所谓了&#xff0c;都快过年了&#xff0c;还要啥自行车 我上来就是一段代码猛如虎 1.1 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyS…

ORB-SLAM2 --- ORBmatcher::Fuse函数 --- 局部建图线程调用重载版

目录 1.函数作用 2.code 3.函数解析 1.函数作用 将参数一的关键帧的地图点与参数二的地图点集合进行融合。 将地图点投影到关键帧中进行匹配和融合&#xff1b;融合策略如下&#xff1a; 1.如果地图点能匹配关键帧的特征点&#xff0c;并且该点有对应的地图点&…

六、k8s Pod控制器详解

1 Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建控制器创建的pod&#x…

异常处理部分

文章目录一、异常概述及体系结构分类ErrorException异常的体系结构异常处理&#xff1a;抓抛模型异常处理机制一&#xff1a;try-catch-finallyfinally的使用异常处理机制一&#xff1a;throws异常类型如何选择两种方式手动生成异常对象如何定义自定义的异常类一、异常概述及体…

JVM学习- - -虚拟机栈详解

前言&#xff1a;今天学长带领大家走进JVM学习&#xff0c;让我们一起来学习认识虚拟机栈吧~ 目录 1 虚拟机栈概述 虚拟机栈出现的背景 初步印象 内存中的栈和堆 虚拟机栈基本内容 栈的优点 2 栈的存储单位 栈中存储什么&#xff1f; 栈运行原理 栈帧的内部结构 3 局…

【云原生】k8s之存储卷

内容预知 前言 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 4. PVC 和 PV的静态存储卷 4.1 pv和pvc的介绍 4.2 pvc 和pv的创建过程及销毁过程 4.3 对pv的操作指导 4.4 静态创建pv和pvc资源由pod运用过程 步骤一&#xff1a;在NFS主机上创建共享目录&#xff0c;…

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

因工作需要&#xff0c;需要将目标检测模型 部署在开发板上。在走了很多弯路后 找到一个成功的案例并记载下来 这里说一下我现有的硬件设备 。 我是购买的RADXA的rock3a开发板 搭载的soc是rk3568 这是开发板的正面图&#xff0c;因为瑞芯微针对计算机视觉中的目标检测模型有一…

Java IO流 - 缓冲流的详细使用介绍

文章目录缓冲流缓冲流概述字节缓冲流字符缓存流缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用&#xff1a;缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能 缓冲流分为: 字节缓存输入流、字节…

做个测试工具

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

uniapp中引入vant Weapp

Vant Weapp官&#xff1a;https://vant-contrib.gitee.io/vant-weapp/#/home 步骤一&#xff1a;下载vant组件插件 从github上下载该插件https://github.com/youzan/vant-weapp 只要这个dist文件夹&#xff0c;把dist重命名为vant&#xff1b; 步骤二&#xff1a; 与pages…

301-295- 至少有 K 个重复字符的最长子串-0105

题解 本题使用分治策略,如果某个字符的出现次数小于k,则用它将数组分开,再把每个子数组组委参数递归执行.如果都大于k,则将该字符串的长度返回. 用一个字符分割,往深了分割各子字符串,这个字符分割完成,使用另一个字符进行分割,而不是一次用多个字符进行分割.这个题递归有些绕…