当前位置: 首页 > news >正文

完全二叉树的基本操作(顺序存储)

#include<iostream>
#include<math.h>
using namespace std;#define MaxSize 100
struct TreeNode {int value;bool isEmpty;//判断该节点是否为空
}t[MaxSize];/**
*定义一个长度位MaxSize的数组,按照从上到下,
*从左到右的方式依次存储完全二叉树的各个节点
*/
//TreeNode t[MaxSize];//初始化二叉树:注意从数组下标来进行存储
void InitTreeNode(TreeNode * t) {for (int i = 0; i < MaxSize; i++) {t[i].isEmpty = true;}
}           /*
i的左孩子——2i
i的右孩子——2i+1
i的父节点——【i/2】
i所在的层次——log2的(n+1)向上取整  或者  log2的n(向下取整)
*///寻找i的左节点的数据
bool FindLeft(TreeNode* t, int size, int &value) {if (size * 2 > 100 - 1||t[size*2].isEmpty==true) {return false;}value = t[size*2].value;return true;
}//寻找i的右节点的数据
bool FindRight(TreeNode* t, int size, int& value) {if (size * 2 +1> 100 - 1 || t[size*2+1].isEmpty == true) {return false;}value = t[size*2+1].value;return true;
}//寻找i的父节点的数据
bool FindFather(TreeNode* t, int size, int& value) {if ( t[size /2].isEmpty == true) {return false;}value = t[size/2].value;return true;
}//寻找i的层次
double FindHigh(TreeNode* t, int size) {//i所在的层次——log2的(n+1)向上取整double a = 2;double b = size + 1;double result = log(b) / log(a);//进行向上取整result = ceil(result);return result;
}int main() {return 0;
}

一、整体功能概述

这段 C++ 代码主要实现了与完全二叉树相关的一些基本操作,包括二叉树节点结构体的定义、二叉树的初始化以及对完全二叉树中节点的左孩子、右孩子、父节点数据的查找,还有对节点所在层次的计算等功能。

二、代码结构分析

1. 头文件和命名空间
#include<iostream>
#include<math.h>
using namespace std;
  • 包含了 <iostream> 头文件用于输入输出操作,<math.h> 头文件用于数学运算(如对数运算用于计算节点层次)。使用了 using namespace std;,这种方式虽然方便但在大型项目中可能会导致命名冲突,更推荐按需使用 std:: 限定符。
2. 二叉树节点结构体定义
#define MaxSize 100
struct TreeNode {int value;bool isEmpty;
}t[MaxSize];
  • 通过宏定义 MaxSize 确定了二叉树节点数组的最大容量为 100。定义了 TreeNode 结构体,包含一个整型的 value 字段用于存储节点的值,以及一个布尔型的 isEmpty 字段用于判断该节点是否为空。同时声明了一个名为 t 的 TreeNode 类型数组,用于存储完全二叉树的各个节点。
3. 二叉树初始化函数
//初始化二叉树:注意从数组下标来进行存储
void InitTreeNode(TreeNode * t) {for (int i = 0; i < MaxSize; i++) {t[i].isEmpty = true;}
}
  • 该函数接受一个指向 TreeNode 数组的指针 t,通过循环将数组中每个节点的 isEmpty 字段设置为 true,表示初始时所有节点都为空,为后续插入节点等操作做好准备。
4. 查找节点相关函数
查找左节点数据函数
//寻找i的左节点的数据
bool FindLeft(TreeNode* t, int size, int &value) {if (size * 2 > 100 - 1 || t[size * 2].isEmpty == true) {return false;}value = t[size * 2].value;return true;
}
  • 此函数用于查找完全二叉树中指定节点(由 size 索引确定)的左孩子节点的数据。首先判断左孩子节点的索引是否超出范围(通过 size * 2 > 100 - 1 判断)或者左孩子节点是否为空(通过 t[size * 2].isEmpty == true 判断),如果满足其中一个条件则返回 false。否则,将左孩子节点的值赋给传入的引用参数 value,并返回 true
查找右节点数据函数
//寻找i的右节点的数据
bool FindRight(TreeNode* t, int size, int &value) {if (size * 2 + 1 > 100 - 1 || t[size * 2 + 1].isEmpty == true) {return false;}value = t[size * 2 + 1].value;return true;
}
  • 与查找左节点数据函数类似,用于查找指定节点的右孩子节点的数据。先进行索引范围和节点是否为空的判断,满足条件则返回 false,否则赋值并返回 true
查找父节点数据函数
//寻找i的父节点的数据
bool FindFather(TreeNode* t, intsize, int &value) {if (t[size / 2].isEmpty == true) {return false;}value = t[size / 2].value;return true;
}
  • 该函数用于查找指定节点的父节点的数据。判断父节点是否为空(通过 t[size / 2].isEmpty == true 判断),为空则返回 false,否则赋值并返回 true
5. 计算节点层次函数
//寻找i的层次
double FindHigh(TreeNode* t, int size) {//i所在的层次——log2的(n+1)向上取整double a = 2;double b = size + 1;double result = log(b) / log(a);//进行向上取整result = ceil(result);return result;
}
  • 此函数用于计算完全二叉树中指定节点(由 size 索引确定)所在的层次。根据公式先通过对数运算计算出一个初步结果(以 2 为底的对数,通过换底公式 log(b) / log(a) 实现),然后使用 ceil() 函数对结果进行向上取整,最后返回该节点所在的层次值。

相关文章:

完全二叉树的基本操作(顺序存储)

#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组&#xff0c;按照从上到下&#xff0c; *从左到右的方式依次存储完全…...

【HTTP】http与https

http与https的关系 应用层协议&#xff1a; http&#xff08;HyperText Transfer Protocol&#xff09;超文本传输协议&#xff1b; https&#xff08;Hypertext Transfer Protocol Secure&#xff09;超文本传输安全协议&#xff1b; 传输层协议&#xff1a;TCP&#xff08;Tr…...

【Git多人开发与协作之团队的环境搭建】

Git多人开发与协作之团队的环境搭建 新的改变1. Git 的用途2. 分支的概念与类型3. HEAD 和分支指针如何查看 HEAD 指向的位置&#xff1a; 4. 常见的 Git 操作5. 常见问题与解决方法总结GitHub 项目获取实操在新电脑上运行 Git1. 安装 Git2. 配置用户名和邮箱3.配置 Git 和 SSH…...

java基础概念36:正则表达式1

一、正则表达式的作用 作用一&#xff1a;校验字符串是否满足规则&#xff1b;作用二&#xff1a;在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例&#xff1a; public static void main(String[] args) {System.out.println("a".matc…...

java实现小程序接口返回Base64图片

文章目录 引言I java 接口返回Base64图片接口设计获取验证码图片-base64字符串获取验证码图片-二进制流arraybufferII 小程序端代码过期代码: 显示文件流图片(arraybuffer)知识扩展:微信小程序下载后端返回的文件流引言 场景: 图形验证码 背景: 接口返回arraybuffer的格式…...

网络编程并发服务器的应用

作业2&#xff1a;完成局域网CS模型&#xff0c;局域网内一个服务器&#xff0c;多个客户端连接一个服务器&#xff0c;完成局域网聊天&#xff08;select函数&#xff0c;poll函数&#xff0c;完成TCP并发服务器&#xff09;。 poll函数应用&#xff1a; 服务器部分代码&…...

数据结构——停车场管理问题

目录 1、问题描述2、逐步分析1&#xff09;涉及操作2&#xff09;代码实现 3、代码整合 1、问题描述 1、题目 设停车场内只有一个可停放n辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序&#xff0c;依次由北向南排列&#x…...

道品智能科技移动式水肥一体机:农业灌溉施肥的革新之选

在现代农业的发展进程中&#xff0c;科技的力量正日益凸显。其中&#xff0c;移动式水肥一体机以其独特的可移动性、智能化以及实现水肥一体化的卓越性能&#xff0c;成为了农业领域的一颗璀璨新星。它不仅改变了传统的农业灌溉施肥方式&#xff0c;更为农业生产带来了高效、精…...

AI实习--常用的Linux命令

一、基础命令 1. 切换到根目录。 cd ~ 2. 返回上一级目录。 cd .. 3. 查看当前目录下包括哪些文件和文件夹。 ls 4. 查看当前路径。 pwd 5. 将文件或文件夹剪切到目标目录下。 mv 文件所在路径 目标路径 6. 查看文本文件内容。 cat 文本文件名 7. 创建文件或文件夹…...

Python学习指南 + 谷歌浏览器如何安装插件

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 前言 Python 官方文档的使用 谷歌浏览器中如何安装插件 前言 在学习Python时&#xff0c;我们可能会出现这样的困惑&#x…...

研0找实习【学nlp】15---我的后续,总结(暂时性完结)

当下进展成果&#xff1a; nlptransformerpytorchhuggingfacebert简历环境配置表情识别文本分类 断更了快1个月&#xff0c;2个礼拜找实习&#xff0c;1个礼拜伤心&#xff0c;1个礼拜想我要干什么…… 承认自己的才疏学浅&#xff0c;了解了leetcode&#xff0c;和老师商量了…...

kylin麒麟银河桌面版操作系统安装部署

本文主要描述kylin麒麟银河桌面版操作系统的安装&#xff0c;该操作系统的安装源文件可以从kylin麒麟银河官方网站上下载&#xff0c;商业版本需要申请试用&#xff0c;开源版本可以直接下载使用。 如上所示&#xff0c;x86芯片处理器架构的请下载INTEL版本&#xff0c;华为海思…...

MyBatis插件原理及应用

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 介绍<plugins>标签解析拦截器链的工作原理插件的应用场景MyBatis插件应用的四个组件InterceptorChain和Interceptor MyBatis框架…...

[M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;743. 网络延迟时间 相关链接&#xff1a; [图最短路模板] 五大最短路常用模板) 2. 题目解析 怎么讲呢&#xff0c;挺抽象的…很久没写最短路算法了。反正也是写出来了&#xff0c;但脱离了模板&#xff0c;把…...

MySQL 中的锁

MySQL 中的锁&#xff1a;全面解析与应用指南 在 MySQL 数据库的复杂世界里&#xff0c;锁是确保数据一致性、完整性以及并发控制的关键机制。无论是简单的小型应用还是复杂的企业级系统&#xff0c;深入理解 MySQL 中的锁对于优化数据库性能、避免数据冲突和错误都具有至关重要…...

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…...

【C++11】尽显锋芒

(续) 一、可变参数模板 C11支持可变参数模板&#xff0c;也就是说支持可变数量参数的函数模板和类模板&#xff0c;可变数目的参数被称 为参数包&#xff0c;存在两种参数包&#xff1a;模板参数包&#xff0c;表示零或多个模板参数&#xff1b;函数参数包&#xff1a;表示零…...

掌握控制流的艺术:Go语言中的if、for和switch语句

标题:掌握控制流的艺术:Go语言中的if、for和switch语句 在Go语言的编程世界中,控制流语句是构建程序逻辑的基石。if语句、for循环和switch语句是我们最常用的控制流工具,它们让我们能够根据不同的条件执行不同的代码块。本文将深入探讨这些语句的使用方法、技术细节和实际…...

飞书会话消息左右排列

飞书会话消息左右排列 1. 飞书登录后&#xff0c;点击头像&#xff0c;弹出菜单有个按钮设置 2. 3....

.net 支持跨平台(桌面)系列技术汇总

1. 首先微软老大哥的.net core 。 .NET Core 是微软开发的一个跨平台、高性能的开源框架&#xff0c;用于构建云和互联网连接的新型应用。 它允许开发者在 Windows、macOS 和 Linux 上使用喜爱的开发工具进行开发&#xff0c;并支持部署到云或本地环境。 .NET Core 是对 .NET …...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

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