数据结构-5.5.二叉树的存储结构

一.二叉树的顺序存储:

a.完全二叉树:

1.顺序存储中利用了静态数组,空间大小有限:

2.基本操作:

(i是结点编号)

1.上述图片中i所在的层次后面的公式应该把n换成i(图片里写错了);

2.上述图片判断i是否有左孩子,只需要判断是否2i<=n(2i代表第i个结点的左孩子,n代表完全二叉树的结点总数),如果2i<=n,就说明有左孩子,如果2i>n,说明没有左孩子(思路:把i当作是最后一个结点,此时i等于n,如果i有左孩子即2i,那么2i就大于n,此时结点总数为2i,显然不等于n,说明没有左孩子),判断i是否有右孩子同理;

3.上述图片判断i是否是叶子/分支结点,只需要判断是否i>[n/2] (这里是对n/2向下取整)(i代表结点编号,n代表完全二叉树的结点总数),如果i>[n/2],就说明是叶子/分支结点,如果i<=[n/2],就说明不是叶子/分支结点

b.普通二叉树:

(i是结点编号)

为了解决上述图片中无法从结点编号反应出结点间逻辑关系的问题,可以让普通二叉树的结点编号与完全二叉树一一对应起来:

但此时就会导致判断某结点是否有左/右孩子以及是否是叶子/分支结点无法用i与n之间的关系推导(例如上述图片中的二叉树如果是完全二叉树,那么编号为4的结点的右子结点的编号应该为9,但实际为7),此时就只能通过刚开始创建的结构体TreeNode里的数据isEmpty来判断该结点是否为空(isEmpty为true时结点为空,反之非空),

比如上述图片中要判断5号结点是否有左子结点即编号为10的结点,就需要判断编号为10的结点是否为空(到数组下标为10的单元判断),若为空,则没有左子结点,反之有。

显然,采用这种顺序存储的方式来存储二叉树里面可能会有大量的空间浪费:


二.二叉树的链式存储:

1.一个结点包括数据域和左子结点指针,右子结点指针,如果左/右子结点没有,将其对应的指针设为NULL即可;

2.一个结点有两个指针域,如果有n个结点,就有2n个指针域;

3.除了根结点外,每一个结点头上都会连一个指针,因此共有n-1个结点头上连一个指针;

4.n个结点的二叉链表共有n+1个空链域(因为共有2n个指针域,共有n-1个结点头上连一个指针即用了n-1个指针域,剩下2n-(n-1)=n+1个指针域即空指针域,为NULL),空链域可用于构造线索二叉树;

5.由于一个结点包括左子结点指针,右子结点指针,因此也叫二叉链表;

6.插入数据:

7.查找:

  • 如果要查找某个结点的左/右子结点,只需要判断左/右子结点指针是否为空即可,为空代表没有左/右子结点,不为空时左/右子结点指针对应的结点就是要查找的结点;

  • 要查找某结点如p结点的父结点,只能从根结点开始遍历寻找,看哪个结点的左/右子结点指针指向p结点,最终就可以找到p结点的父结点-->弊端:如果二叉树高度大,这种找父结点的方式就会很耗时,因为遍历的结点可能会很多,因此如果经常要逆向的查找某个结点的父结点或者要用到父结点,可以在二叉树结构体中再定义一个指针指向父结点,此时算上左子结点指针和右子结点指针总共就有3个指针,也叫三叉链表(根据实际需求决定要不要加父结点指针)


三.总结:


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何针对项目中的技术难点准备面试?——黑马点评为例

最核心的&#xff0c;包装和准备 个人项目&#xff0c;怎么包装&#xff1f;一定要写出代码才可以吗&#xff1f; 你可以在系统A中实现就可以&#xff0c;了解其中实现的细节&#xff0c;怎么跟面试官对线等等&#xff0c;这些话术到位了之后&#xff0c;再把它融入到系统B&a…

echarts 入门

工作中第一次碰到echarts&#xff0c;当时有大哥。二进宫没办法&#xff0c;只能搞定它。 感觉生活就是这样&#xff0c;不能解决的问题总是会反复出现。通过看视频、查资料&#xff0c;完成了工作要求。写一篇Hello World&#xff0c;进行备查。 基本使用 快速上手 <!DO…

探索Theine:Python中的AI缓存新贵

文章目录 探索Theine&#xff1a;Python中的AI缓存新贵背景&#xff1a;为何选择Theine&#xff1f;Theine是什么&#xff1f;如何安装Theine&#xff1f;简单的库函数使用方法场景应用场景一&#xff1a;Web应用缓存场景二&#xff1a;分布式系统中的数据共享场景三&#xff1…

【亲测可行】ubuntu根目录空间不够,将其它盘挂载到/opt

文章目录 &#x1f315;缘起&#x1f315;从其它盘压缩出一个未分配的空间&#x1f319;从windows系统中压缩出个未分配的空间&#x1f319;从linux系统中压缩出个未分配的空间 &#x1f315;右键点击未分配的盘新建分区&#x1f315;查看分区&#x1f315;先将新分区挂载到/mn…

基于SpringBoot+Vue+Uniapp的仓库点单小程序的详细设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行效果图 代码运行效果图 代码运行效果图 代码运行效果图代码运行效果图 代码运行效果图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发…

计算机网络(十一) —— 数据链路层

目录 一&#xff0c;关于数据链路层 二&#xff0c;以太网协议 2.1 局域网 2.2 Mac地址 2.3 Mac帧报头 2.4 MTU 三&#xff0c;ARP协议 3.1 ARP是什么 3.2 ARP原理 3.3 ARP报头 3.4 模拟ARP过程 3.5 ARP周边问题 四&#xff0c;NAT技术 4.1 NAT技术背景 4.2 NAT转…

图像分类-demo(Lenet),tensorflow和Alexnet

目录 demo(Lenet) 代码实现基本步骤&#xff1a; TensorFlow 一、核心概念 二、主要特点 三、简单实现 参数: 模型编译 模型训练 模型评估 Alexnet model.py train.py predict.py demo(Lenet) PyTorch提供了一个名为“torchvision”的附加库&#xff0c;其中包含…

GC1262E替代APX9262S/茂达芯片在笔记本和显卡风散热风扇中的应用分享

随着移动计算和高性能图形处理技术的不断进步&#xff0c;笔记本电脑和显卡的散热需求日益增加。散热风扇作为关键组件&#xff0c;其控制芯片的选择对系统性能和用户体验有着直接影响。本文将探讨芯麦的GC1262E芯片如何替代APX9262S/茂达芯片&#xff0c;应用于笔记本和显卡的…

ScriptableObject基本使用

使用方法 自定义类继承ScriptableObject 可以在类内部增加数据或者数据类&#xff0c;一般用于配置 注意事项 给继承ScriptableObject的类增加CreateAssetMenu特性。 CreateAssetMenu一般默认三个参数 第一个参数是父目录 第二个参数是父目录的子选项 第三个参数是可以…

SwiftUI 6.0(iOS 18)新增的网格渐变色 MeshGradient 解惑

概述 在 SwiftUI 中&#xff0c;我们可以借助渐变色&#xff08;Gradient&#xff09;来实现更加灵动多彩的着色效果。从 SwiftUI 6.0 开始&#xff0c;苹果增加了全新的网格渐变色让我们对其有了更自由的定制度。 因为 gif 格式图片自身的显示能力有限&#xff0c;所以上面的…

群晖使用frpc连接qbittorrent时会出现Unauthorized

跨域问题&#xff1a; 如果你是通过不同的网络或子网访问 qBittorrent Web UI&#xff0c;可能会引发跨域问题。尝试在 qBittorrent.conf 中添加以下设置&#xff0c;允许跨域访问&#xff1a; find / -name qBittorrent.conf WebUI\HostHeaderValidationfalse 成功

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…

2014年国赛高教杯数学建模D题储药柜的设计解题全过程文档及程序

2014年国赛高教杯数学建模 D题 储药柜的设计 储药柜的结构类似于书橱&#xff0c;通常由若干个横向隔板和竖向隔板将储药柜分割成若干个储药槽(如图1所示)。为保证药品分拣的准确率&#xff0c;防止发药错误&#xff0c;一个储药槽内只能摆放同一种药品。药品在储药槽中的排列…

PHP2-CTFWeb进阶wp-攻防世界13

CTFWeb进阶wp-攻防世界-PHP2 用了御剑和dirsearch扫描了一下发现什么也没扫描到&#xff0c;其它人好像有扫描到的&#xff0c;看了大佬的wp说有index.phps,去查了下。 phps 文件就是 php 的源代码文件&#xff0c;可以当作一个知识点记住&#xff0c;直接访问/index.phps,得…

基于SSM顶岗实习管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

维生素对于生活的重要性

在探索健康奥秘的旅途中&#xff0c;维生素作为人体不可或缺的微量营养素&#xff0c;扮演着至关重要的角色。它们虽不直接提供能量&#xff0c;却是酶促反应、细胞代谢、免疫功能乃至心理健康的基石。今天&#xff0c;让我们一同深入探讨人体所需补充的维生素&#xff0c;这些…

Springboot 整合 Java DL4J 实现医学影像诊断功能

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

智能生成ppt软件哪个好?如何高效生成ppt?

想要快速制作出专业且吸引人的PPT演示文稿吗&#xff1f;ai智能生成ppt工具可以帮你实现这一目标。 无需复杂的设计技巧&#xff0c;也不必花费大量时间&#xff0c;只需几个简单的步骤&#xff0c;就能创造出令人印象深刻的演示文稿。下面是一份免费版教程&#xff0c;让你轻…

Word 首行缩进 2 字符怎么设置?具体步骤演示

在日常的文档编辑和排版中&#xff0c;首行缩进是一个非常常见且重要的排版需求。尤其是在中文文档中&#xff0c;首行缩进能够提高文章的美观度和可读性&#xff0c;使文章结构更加清晰。那 Word 首行缩进 2 字符怎么设置呢&#xff1f;下面就给大家展示具体的操作步骤。 设置…

JavaScript(Web APIs 作用和分类,DOM数是什么,document是什么,根据css选择器来获取DOM元素,修改DOM元素的方式,边量声明)

变量声明 变量声明有三个 var let 和 const建议&#xff1a; const 优先&#xff0c;尽量使用const&#xff0c;原因是&#xff1a; const 语义化更好 很多变量我们声明的时候就知道他不会被更改了&#xff0c;那为什么不用 const呢&#xff1f; 实际开发中也是&#xff0c;…