leetcode 107.二叉树的层序遍||
1.题目要求:
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
2.此题步骤:
1.先创建好队列,出队和入队函数:
//创建队列
typedef struct queue{struct TreeNode* value;struct queue* next;
}queue_t;
//入队
void push(queue_t** head,struct TreeNode* data){queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));newnode->value = data;newnode->next = NULL;if(*head == NULL){*head = newnode;return;}queue_t* tail = *head;while(tail->next != NULL){tail = tail->next;}tail->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){struct TreeNode* x = (*head)->value;(*head) = (*head)->next;return x;
}
2.我们还要创造逆置函数:
void reverse(int* number,int rows){int left = 0;int right = rows - 1;while(left <= right){int temp = number[left];number[left] = number[right];number[right] = temp;left++;right--;}
}
3.在层序遍历之前,设置好各种变量(详情已在代码块里):
*returnSize = 0;if(root == NULL){return NULL;}int* each_line_nodes = (int*)malloc(sizeof(int)*2000);//记录每行结点数int j_1 = 0;int* level_order_number = (int*)malloc(sizeof(int)* 2000);//层序遍历的数组int j_2 = 0;int depth = 0;//树的高度int count = 1;//根结点的个数int nextcount = 0;//下一个结点的个数int size = 0;//记录队列中的个数queue_t* quence = NULL;//设置队列
4.进行层序遍历:
//进行层序遍历push(&quence,root);size++;while(size != 0){depth++;for(int i = 0;i < count;i++){struct TreeNode* temp = pop(&quence);size--;level_order_number[j_2] = temp->val;j_2++;if(temp->left != NULL){push(&quence,temp->left);size++;nextcount++;}if(temp->right != NULL){push(&quence,temp->right);size++;nextcount++;}}each_line_nodes[j_1] = count;j_1++;count = nextcount;nextcount = 0;}
5.创建二维数组,把层序遍历的数组倒着存到二维数组中:
//设立二维数组int** array = (int**)malloc(sizeof(int*)* depth);//设置函数,逆置每行结点数reverse(each_line_nodes,j_1);for(int i = 0;i < depth;i++){array[i] = (int*)malloc(sizeof(int) * each_line_nodes[i]);}int f = j_2 - 1;//把层序遍历的数组倒着存入二维数组中for(int i = 0;i < depth;i++){for(int j = 0;j < each_line_nodes[i];j++){array[i][j] = level_order_number[f];f--;}}
6.开始逆置二维数组每行的元素,然后返回二维数组的地址:
//颠倒每个二维数组的元素for(int i = 0;i < depth;i++){reverse(array[i],each_line_nodes[i]);}*returnSize = depth;*returnColumnSizes = (int*)malloc(sizeof(int) * (*returnSize));for(int i = 0;i < depth;i++){(*returnColumnSizes)[i] = each_line_nodes[i];}return array;
以下为我的全部代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
//创建队列
typedef struct queue{struct TreeNode* value;struct queue* next;
}queue_t;
//入队
void push(queue_t** head,struct TreeNode* data){queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));newnode->value = data;newnode->next = NULL;if(*head == NULL){*head = newnode;return;}queue_t* tail = *head;while(tail->next != NULL){tail = tail->next;}tail->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){struct TreeNode* x = (*head)->value;(*head) = (*head)->next;return x;
}
void reverse(int* number,int rows){int left = 0;int right = rows - 1;while(left <= right){int temp = number[left];number[left] = number[right];number[right] = temp;left++;right--;}
}
int** levelOrderBottom(struct TreeNode* root, int* returnSize, int** returnColumnSizes) {*returnSize = 0;if(root == NULL){return NULL;}int* each_line_nodes = (int*)malloc(sizeof(int)*2000);//记录每行结点数int j_1 = 0;int* level_order_number = (int*)malloc(sizeof(int)* 2000);//层序遍历的数组int j_2 = 0;int depth = 0;//树的高度int count = 1;//根结点的个数int nextcount = 0;//下一个结点的个数int size = 0;//记录队列中的个数queue_t* quence = NULL;//设置队列//进行层序遍历push(&quence,root);size++;while(size != 0){depth++;for(int i = 0;i < count;i++){struct TreeNode* temp = pop(&quence);size--;level_order_number[j_2] = temp->val;j_2++;if(temp->left != NULL){push(&quence,temp->left);size++;nextcount++;}if(temp->right != NULL){push(&quence,temp->right);size++;nextcount++;}}each_line_nodes[j_1] = count;j_1++;count = nextcount;nextcount = 0;}//设立二维数组int** array = (int**)malloc(sizeof(int*)* depth);//设置函数,逆置每行结点数reverse(each_line_nodes,j_1);for(int i = 0;i < depth;i++){array[i] = (int*)malloc(sizeof(int) * each_line_nodes[i]);}int f = j_2 - 1;//把层序遍历的数组倒着存入二维数组中for(int i = 0;i < depth;i++){for(int j = 0;j < each_line_nodes[i];j++){array[i][j] = level_order_number[f];f--;}}//颠倒每个二维数组的元素for(int i = 0;i < depth;i++){reverse(array[i],each_line_nodes[i]);}*returnSize = depth;*returnColumnSizes = (int*)malloc(sizeof(int) * (*returnSize));for(int i = 0;i < depth;i++){(*returnColumnSizes)[i] = each_line_nodes[i];}return array;
}
好了,这就是我的代码,如果各位觉得可以的话,可以给个免费的赞吗?谢谢了^ _ ^ .
相关文章:
leetcode 107.二叉树的层序遍||
1.题目要求: 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)2.此题步骤: 1.先创建好队列,出队和入队函数: //创建队列 typedef struct que…...
C语言 ——— 在控制台实现三子棋游戏(适用于五子棋、十子琪…………)
目录 实现三子棋游戏的简介 三子棋游戏代码的测试文件、实现文件、头文件 实现三子棋游戏 打印菜单,让玩家选择是否玩游戏 --- game.c 玩家对局完后多次选择是否再次进行游戏 --- test.c 三子棋棋子的存储 将二维数组board的行和列定义为常变量 --- game.h 初…...
【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
阿里云于8月3日宣布开源两款重要的大型模型——QWen-7B和QWen-7b-Chat。这两款模型的参数规模达到了令人瞩目的70亿,并且已经在Hugging Face和ModelScope平台上开放,并可免费商用。以下是相关链接: GitHub项目主页:https://githu…...
Java 15 新特性(JKD15)
Java 15 是 Java 语言的最新版本,于 2020 年 9 月 15 日正式发布。Java 15 中引入了许多新的特性和改进,以下是其中的一些主要特性。 1. Text Blocks Java 15 中的 Text Blocks 特性已经从预览状态升级为标准特性。Text Blocks 可以用来简化字符串 lit…...
电脑添加虚拟网卡与ensp互联,互访
一、按照过程 1、打开设备管理器 2、点击网络适配器,点击左上角操作,点击“添加过时硬件” 3、下一页 4、选择“安装我手动从列表选择的硬件”,下一页 5、下拉,选择“网络适配器”,下一页 6、厂商选择“Microsoft”&…...
Kylin系列(一)入门
Kylin系列(一)入门 Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发并贡献至Apache软件基金会。它专为大数据场景设计,能够在Hadoop之上提供低延迟的在线分析处理(OLAP)查询。Kylin通过预计算技术,将复杂的数…...
Mysql大单表JSON优化
优化方案 MySQL 8.0.32 中,有几种方法可以优化存储 JSON 字符串的数据表。以下是一些建议,可以帮助您减少存储空间: 使用压缩: MySQL 8.0 支持表级压缩,可以通过修改表来启用压缩。 ALTER TABLE your_table ROW_FORMATCOMPRESS…...
智能硬件创新实训平台-嵌入式、物联网、移动互联网、人工智能实验实训教学平台
智能硬件是继智能手机之后的一个科技概念,通过软硬件结合的方式,对传统设备进行改造,进而让其拥有智能化的功能。智能化之后,硬件具备连接的能力,实现互联网服务的加载,形成“云端”的典型架构,…...
opencv c++ python等比缩小或放大显示图片代码
c代码,其中scale_percent用来设置百分比,例如50 就是百分之五十,也就是一半的大小,当然也可以设置成200,相当于原来的2倍大小,注意图片路径换成实际路径。 #include <opencv2/opencv.hpp>int main()…...
程序编译及链接
你好!感谢支持孔乙己的新作,本文就程序的编译及链接与大家分析我的思路。 希望能大佬们多多纠正及支持 !!! 个人主页:爱摸鱼的孔乙己-CSDN博客 1.翻译译环境与运行环境 当我们进行程序设计时&…...
逻辑推理复杂推理能力评估之大模型微调(Datawhale AI 夏令营)
在逻辑推理任务中,我们采用了LoRA(Low-Rank Adaptation)技术对大模型进行微调。LoRA是一种高效的模型微调方法,通过引入低秩矩阵调整模型权重,从而实现对大型预训练语言模型的适应性调整。LoRA的主要优势包括对不同下游…...
pikachu漏洞平台~文件包含漏洞
在PHP程序中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏洞。 0x01文件包含漏洞 连接成功,完毕&#x…...
linux系统编程中Shell脚本配置,及man test命令手册
Shell脚本配置是指在脚本中设置各种参数、选项和环境,以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang,它告诉系统使用哪个解释器来执行脚本。例如…...
【康复学习--LeetCode每日一题】572. 另一棵树的子树
题目: 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree …...
OpenAI Function Call实现大模型agent自己判断用工具、上网搜索或直接大模型回答案例
参考: https://blog.csdn.net/weixin_42357472/article/details/140891660?spm=1001.2014.3001.5501 大模型用的deepseek 1)写了两个function,一个是天气工具,一个是搜索工具 2)大模型Function Call自己判断内容属于哪个工具就去调用对应工具 3)如果大模型Function Call…...
文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑源-荷不确定性的省间电力现货市场潮流风险概率评估》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...
JAVA中实现线程安全的三种方式
JAVA中实现线程安全的三种方式 1. 同步代码块2. 同步方法3. ReentrantLock4. 总结 💖The Begin💖点点关注,收藏不迷路💖 1. 同步代码块 使用synchronized关键字加在需要同步的代码块上,并指定一个锁对象。这种方式可以…...
3个二创文案生成器,让文案创作变简单
在当今数字时代,内容创作已经成为了一项非常重要的工作。无论是为了推广产品、营销服务,还是仅仅为了吸引读者,优质的文案都是至关重要的。然而,对于许多人来说,写出令人印象深刻的文案并不容易。这就是为什么二创文案…...
Java 属性拷贝 三种实现方式
第一种 List<OrederPayCustomer> orederPayCustomerList this.list(queryWrapper); List<CustomerResp>customerRespListnew ArrayList<>();for (OrederPayCustomer orederPayCustomer : orederPayCustomerList) {CustomerResp customerResp new Custome…...
C++: 如何把源码编译成SDK提供第三方使用
在我们开发过程中,经常会遇到提供SDK的情况,对于C语言,是可以方便地将源码封装成静态库或者动态库然后打包提供给第三方使用的。这样,一方面可以保护源码,另一方面也简化了对方的使用过程。 目录 一、关于动态库和静态…...
redis详细介绍
Redis是一个开源的、基于内存的高性能键值对数据库,属于NoSQL数据库的一种。它以高性能、丰富的数据结构、持久化特性、复制、集群以及发布/订阅等特性而闻名。以下是Redis的详细介绍: 一、基本介绍 名称:Redis,全称Remote Dicti…...
jar命令
文章目录 jar命令摘要 一、引言二、正文内容2.1 jar解压jar包2.2 重新打成jar包2.3 步骤2.4 sh脚本文件 jar命令 摘要 jar命令 一、引言 jar命令 二、正文内容 2.1 jar解压jar包 \# 解压 jar -xvf test.jar 2.2 重新打成jar包 jar -uvf0 marriage-admin-1.0.0.jar.j…...
CentOS上面的MySQL安装~~~保姆级教程
目录 0.声明 1.下载官网包包 2.新建文件夹,把rpm拖拽进来 3.安装yum源,查看前后变化 4.安装mysql服务 5.查看是否安装成功 6.出现报错的解决方案 7.启动MySQL 8.查看启动服务 9.配置文件 10.重新运行 11.免密码登录 12.再谈配置文件 0.声明…...
数组的复制
需求:现在有一个数组arr{1,2,3},然后有另外一个数组temp{99,100},现在需要将temp复制到arr。 java public class test1 {public static void main(String[] args) {int arr1[] new int[]{1,2,3};int temp[] new int[]{99,100};arr1 temp;System.out.p…...
Python RPA流程自动化机器人简单案例
RPA(Robotic Process Automation,机器人流程自动化)是一种通过软件机器人模拟和执行人类用户在计算机上的操作的技术。 下面是pyautogui 键盘操作的常见参数说明: https://blog.csdn.net/wydyzq12/article/details/122008396 以…...
在git中如何忽略.vscode目录?
在Git中,如果你想忽略某个特定的文件或目录(比如.vscode目录),你可以通过以下步骤来实现: 创建或编辑.gitignore文件 在项目的根目录下,如果还没有.gitignore文件,你需要创建一个。如果已经有了…...
python脚本:连接数据库,检查直播流是否可用
使用的是MySQL数据库 需要使用mysql-connector-python库来连接MySQL数据库。首先,请确保你已经安装了这个库,如果没有安装,可以通过以下命令安装: pip install mysql-connector-python假设: MySQL数据库已经配置好,并且有一个名为live_streams的表,其中包含至少两列:…...
MFC修改鼠标光标形状
1.新建项目 2.添加资源Cursor 3.添加鼠标移动响应函数,用于显示鼠标光标形状 void C修改鼠标光标View::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息处理程序代码和/或调用默认值CRect rc;GetClientRect(&rc);if (point.x < rc.right / …...
【英语语法】限定性定语从句与非限定性定语从句(先行词概念)
文章目录 英语语法:限定性定语从句与非限定性定语从句详解1. 限定性定语从句1.1 定义与功能1.2 使用关系代词和关系副词示例句子: 1.3 标点和语调 2. 非限定性定语从句2.1 定义与功能2.2 使用关系代词示例句子: 2.3 标点和语调 3. 区别和选择…...
web小游戏开发:2048(完)移动操作及动画效果
web小游戏开发:2048(完)移动操作及动画效果 添加随机数字游戏开始时的初始化显示分数移动和合并获取行列元素下标记录移动轨迹完整的 js小结添加随机数字 书接前文,我们在前边定义了一个 move 方法,暂时先往后放放。 在我们已经初始化好的界面上,我们需要先制作一个出现…...
pythonflaskMYSQL自驾游搜索系统32127-计算机毕业设计项目选题推荐(附源码)
目 录 摘要 1 绪论 1.1研究背景 1.2爬虫技术 1.3flask框架介绍 2 1.4论文结构与章节安排 3 2 自驾游搜索系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2.3.2 非功…...
(学习总结10)C++类和对象1
C类和对象1 一、类的定义1.类定义格式2.访问限定符3. 类域 二、实例化1.实例化概念2.对象大小 三、this指针四、C和C语言实现Stack对比 以下代码环境在 VS2022。 一、类的定义 1.类定义格式 class 为定义类的关键字,Stack 为类的名字, { } 中为类的主体…...
python 中 file.read(), file.readline()和file.readlines()区别和用法
python 中 file.read(), file.readline()和file.readlines()区别和用法 文章目录 python 中 file.read(), file.readline()和file.readlines()区别和用法1. file.read()2. file.readline()3. file.readlines()4. 总结5. 注意事项 file.read(), file.readline(), 和 file.readli…...
车辆出险报告(h5)-车辆出险记录接口-车辆相关接口
接口简介:通过vin及行驶证查询车辆出险、理赔、事故记录接口。查询成功率99%,返回URL地址的查询报告。 不能对返回的报告进行任何的修改,否则由用户自行承担相应的责任 报告结果只保留30天,如需永久保存,请您查询后自行保存 接口地…...
如何在 Next.js 中实现分页
一.介绍 分页功能可将大型数据集划分为可管理的块,从而帮助管理它们。您可以在 Next.js 的服务器端或客户端实现分页。这里有一份精简的入门指南。 1. 服务器端分页 1.1 创建 API 路由 设置 API 路由来处理分页。 // pages/api/posts.js export default async …...
Mockito基础入门
Mockito 快速入门教程 概述 Mockito 是一个流行的Java单元测试Mock框架,用于接口和数据模拟。 依赖安装 <dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>3.12.4</version>…...
o(∩_∩)o设置代理访问博客(五)o(∩_∩)o --使用BeeWare打包应用
背景: 最近了解了一个新的打包框架BeeWare,据说他支持的平台要比nuitka更多。利用之前访问博客的脚本,来尝试一下打包windows应用程序。 BeeWare 从零开始 环境:python -m pip install briefcase 使用pycharm新建了一个名为bee…...
使用GPT-4o mini融合GraphRAG技术进行实战应用
什么是gpt-4o mini OpenAI 推出 GPT-4o mini,这是他们最具成本效益的小型模型。它的定价为每百万输入代币 15 美分,每百万输出代币 60 美分,比之前的 Frontier 型号便宜一个数量级,比 GPT-3.5 Turbo 便宜 60% 以上。目前…...
嵌入式人工智能(45-基于树莓派4B的扩展板-舵机驱动板PCA9685)
1、简介 智能小车、机械臂、摄像头云台会有多个舵机,而微控制器芯片的PWM输出引脚不够的情况下,就可以用PCA9685(16路舵机)来解决这一问题。 PCA9685是一款I2C总线控制的16通道LED控制器,专为红/绿/蓝/琥珀ÿ…...
3.11.样式迁移
样式迁移 使用卷积神经网络,自动的将一个图像中的风格应用在另一图像之上,即样式迁移(style transfer) 为了完成这一过程,我们需要两张输入图像:一张是内容图像,一张是风格图像,随后使用神经网络修…...
Spring统一返回类型中关于String的问题
文章目录 1. 问题铺垫2. 解决方法3. 问题分析4 解决方法解释 1. 问题铺垫 首先设置了以下代码统一处理返回类型 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {Overridepublic boolean supports(MethodParameter returnType, Class converte…...
Python酷库之旅-第三方库Pandas(065)
目录 一、用法精讲 256、pandas.Series.sparse方法 256-1、语法 256-2、参数 256-3、功能 256-4、返回值 256-5、说明 256-6、用法 256-6-1、数据准备 256-6-2、代码示例 256-6-3、结果输出 257、pandas.DataFrame.sparse方法 257-1、语法 257-2、参数 257-3、功…...
Go语言标准库中的双向链表的基本用法
什么是二分查找区间? 什么是链表? 链表节点的代码实现: 链表的遍历: 链表如何插入元素? go语言标准库的链表: 练习代码: package mainimport ("container/list""fm…...
Cocos Creator2D游戏开发(9)-飞机大战(7)-爆炸效果
这个爆炸效果我卡在这里好长时间,视频反复的看, 然后把代码反复的测试,修改,终于给弄出来 视频中这段,作者也是修改了好几次, 跟着做也走了不少弯路; 最后反正弄出来了; 有几个坑; ① 动画体创建位置是enemy_prefab ② enemy_prefab预制体下不用放动画就行; ③ 代码中引用Anima…...
Redis入门概述
Redis 概述 Redis 是速度非常快的非关系型(NoSQL)基于内存的键值数据库。 键的类型只能为字符串,值可以支持五种数据类型:字符串(stirng)、列表(list)、集合(set)、散列表(hash)、有…...
Cursor搭配cmake实现C++程序的编译、运行和调试
Cursor搭配cmake实现C程序的编译、运行和调试 Cursor是一个开源的AI编程编辑器,开源地址https://github.com/getcursor/cursor ,它其实是一个集成了Chat-GPT的VS Code。 关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好&…...
读零信任网络:在不可信网络中构建安全系统09用户信任
1. 用户信任 1.1. 将设备身份和用户身份混为一谈会导致一些显而易见的问题 1.1.1. 特别是当用户拥有多台设备时,而这种情况很普遍 1.1.2. 应该针对不同类型的设备提供相匹配的凭证 1.1.3. 在存在共用终端设备的情况下,所有的这些问题将更加凸显 1.2…...
二叉树的实现 c语言
注:层序所需的队列文件请参考 C语言 实现栈(顺序表)和队列(链表)-CSDN博客 一、 BTree.h 函数包含: // 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 // 二叉树销毁 // 二叉树节点个数 // 二叉树叶子节点个数 // 二叉树第k层节点个数 /…...
【Git】如何优雅地使用Git中的tag来管理项目版本
目录 tagtag 和 branch区别操作命令打tag,当前分支标记tag提交到远程服务器删除本地tag删除远程tag切换到特定的tag查看所有tag查看标签详细信息 好书推荐 tag Git中的tag(标签)用于给项目在特定时间点(某个版本发布)…...
白骑士的PyCharm教学进阶篇 2.3 测试与自动化
系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.2 高级调试技术 在现代软件开发中,测试和自动化是保证代码质量和项目稳定性的重要环节。PyCharm作为一款强大的Python IDE,提供了丰富的工具来支持单元测试和自动化测试。本篇将详细介绍单元测…...