Leetcode 1302.层数最深子叶结点的和

大家好,今天我给大家分享一下我关于这个题的想法,我这个题过程比较复杂,但大家如果觉得好的话,就请给个免费的赞吧,谢谢了^ _ ^
1.题目要求:

给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和 。

举例如图所示:
在这里插入图片描述
2.做题思路:
1.先用前序遍历求出树的结点数量:

void preorder(struct TreeNode* root,int* length){if(root == NULL){return;}(*length)++;preorder(root->left,length);preorder(root->right,length);
}
int* length = (int*)malloc(sizeof(int));*length = 0;preorder(root,length);

2.然后再根据结点数量用malloc分配两个数组,一个要进行层序遍历,一个要记录树每一层的宽度:

	//此数组是用来存层序遍历的int* treeval = (int*)malloc(sizeof(int)* (*length));int j = 0;//此数组是用来进行记录树的每层的宽度int* col = (int*)malloc(sizeof(int) * (*length + 1));int j_1 = 0;

3.然后我们进行层序遍历,设置变量把每一行结点的数量记录下来,再把每个结点存入数组中:

typedef struct queue{struct TreeNode* data;struct queue* next;
}queue_t;
//入队
void insert_tail(queue_t** head,struct TreeNode* data)
{queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));memset(newnode,0,sizeof(queue_t));newnode->data = data;newnode->next = NULL;if(*head == NULL){*head = newnode;return;}queue_t* cur = *head;while(cur->next != NULL){cur = cur->next;}cur->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){if(*head == NULL){struct TreeNode* x = (*head)->data;(*head) = (*head)->next;return x;}struct TreeNode* x = (*head)->data;(*head) = (*head)->next;return x;
}//开始层序遍历int nextcount = 0;//记录树每一层的结点数量queue_t* quence = NULL;int size = 0;insert_tail(&quence,root);size++;while(size != 0){for(i = 0;i < count;i++){struct TreeNode* node = pop(&quence);treeval[j] = node->val;j++;size--;if(node->left != NULL){insert_tail(&quence,node->left);size++;nextcount++;}if(node->right != NULL){insert_tail(&quence,node->right);size++;nextcount++;}}col[j_1] = nextcount;j_1++;count = nextcount;nextcount = 0;}

3.全部代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
typedef struct queue{struct TreeNode* data;struct queue* next;
}queue_t;
//出队
void insert_tail(queue_t** head,struct TreeNode* data)
{queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));memset(newnode,0,sizeof(queue_t));newnode->data = data;newnode->next = NULL;if(*head == NULL){*head = newnode;return;}queue_t* cur = *head;while(cur->next != NULL){cur = cur->next;}cur->next = newnode;
}
//入队
struct TreeNode* pop(queue_t** head){if(*head == NULL){struct TreeNode* x = (*head)->data;(*head) = (*head)->next;return x;}struct TreeNode* x = (*head)->data;(*head) = (*head)->next;return x;
}
//进行前序遍历
void preorder(struct TreeNode* root,int* length){if(root == NULL){return;}(*length)++;preorder(root->left,length);preorder(root->right,length);
}
int deepestLeavesSum(struct TreeNode* root) {int* length = (int*)malloc(sizeof(int));*length = 0;preorder(root,length);int* treeval = (int*)malloc(sizeof(int)* (*length));int j = 0;int* col = (int*)malloc(sizeof(int) * (*length + 1));int j_1 = 0;int count = 1;col[j_1] = count;j_1++;int i = 0;//记录树的每一层的宽度int nextcount = 0;queue_t* quence = NULL;int size = 0;insert_tail(&quence,root);size++;while(size != 0){for(i = 0;i < count;i++){struct TreeNode* node = pop(&quence);treeval[j] = node->val;j++;size--;if(node->left != NULL){insert_tail(&quence,node->left);size++;nextcount++;}if(node->right != NULL){insert_tail(&quence,node->right);size++;nextcount++;}}col[j_1] = nextcount;j_1++;count = nextcount;nextcount = 0;}int count1 = col[j_1 - 2];int sum = 0;int f = 0;for(i = j - 1;i >= 0;i--){sum += treeval[i];f++;if(f == count1){break;}}return sum;
}

好了,这就是我全部代码大家如果觉得好的话,就请给个免费的赞吧,谢谢了^ _ ^ .

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

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

相关文章

Go语言并发编程-Context上下文

Context上下文 Context概述 Go 1.7 标准库引入 context&#xff0c;译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#xff1a;取…

python爬虫实现简单的代理ip池

python爬虫实现简单的代理ip池 我们在普通的爬虫过程中经常遇到一些网站对ip进行封锁的 下面演示一下普通的爬虫程序 使用requests.get爬取数据 这段代码是爬取豆瓣排行榜的数据&#xff0c;使用f12来查看请求的url和数据格式 代码 def requestData():# 爬取数据的urlur…

数学基础【俗说矩阵】:矩阵相乘

矩阵乘法 矩阵乘法推导过程 一、两个线性方程复合代入 二、X1和X2合并同类项 三、复合后方程组结果 四、线性方程组矩阵表示 五、线性方程组矩阵映射表示 复合映射表示 六、矩阵乘法导出 矩阵乘法法则 1、规则一推导过程 左取行&#xff0c;右取列&#xff0c;对应相乘后…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.4信息安全

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

「Vue组件化」封装i18n国际化

前言 在Vue应用中实现国际化(i18n),通常需要使用一些专门的库,比如vue-i18n。本文主要介绍自定义封装i18n,支持Vue、uniapp等版本。 设计思路 一、预期效果 二、核心代码 2.1 i18n.xlsx文件准备 2.2 脚本执行 根目录main.js根目录locali18n.xlsxnode main.jsmain.js 文件…

【ARM】MDK-解决CMSIS_DAP.DLL missing报错

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录解决CMSIS_DAP.DLL missing的报错情况&#xff0c;对应相关报错信息&#xff0c;供后续客户参考&#xff0c;快速解决客户问题。 2、 问题场景 客户进行硬件调试时&#xff0c;发现Target设置内有CMSIS_DAP.DL…

全时守护,无死角监测:重点海域渔港视频AI智能监管方案

一、方案背景 随着海洋经济的快速发展和海洋资源的日益紧缺&#xff0c;对重点海域渔港进行有效监控和管理显得尤为重要。视频监控作为一种高效、实时的管理手段&#xff0c;已成为渔港管理中不可或缺的一部分。当前&#xff0c;我国海域面积广阔&#xff0c;渔港众多&#xf…

uni-app学习HBuilderX学习-微信开发者工具配置

HBuilderX官网&#xff1a;简介 - HBuilderX 文档 (dcloud.net.cn)https://hx.dcloud.net.cn/ uni-app官网&#xff1a; uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/quickstart-hx.htmlHBuilder下载安装&#xff1a;打开官网 uni-app项目的微信开发者工具配置…

41 QOS技术(服务质量)

1 QOS 产生背景 对于网络业务&#xff0c;影响服务质量的因素包括传输的带宽、传送的时延、数据的丢包率等。网络资源总是有限的&#xff0c;只要存在抢夺网络资源的情况&#xff0c;就会出现服务质量的要求网络总带宽固定的情况下&#xff0c;如果某类业务占用的带宽越多&am…

Mysql-错误处理: Found option without preceding group in config file

1、问题描述 安装MYSQL时&#xff0c;在cmd中“初始化”数据库时&#xff0c;输入命令&#xff1a; mysqld --initialize --consolecmd报错&#xff1a; D:\mysql-5.7.36-winx64\bin>mysql --initialize --console mysql: [ERROR] Found option without preceding group …

Web开发:ASP.NET CORE的后端小结(基础)

1.后端重定向到指定路由 public IActionResult Index(){return RedirectToAction("Index", "Main");//重定向>Main/Index} 【备注】如果在MainController的Index方法中return View();本质是 return View("Index")&#xff0c;返回和方法同名的…

vscode通过ssh链接远程服务器上的docker

目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a;…

【golang-ent】go-zero框架 整合 ent orm框架 | 解决left join未关联报错的问题

一、场景 1、子表&#xff1a;cp_member_point_history cp_member_point_history表中字段&#xff1a;cp_point_reward_id 是cp_point_reward的主键id 当本表中的cp_point_reward_id字段为0&#xff08;即&#xff1a;没有可关联主表的&#xff09; CREATE TABLE cp_member_poi…

数据结构(Java):优先级队列(堆)堆的模拟实现

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列&#xff08;堆&#xff09;的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 1、优先…

CH552的bootload程序IAP直接对ROM-flash修改数据(未尝试)

手动写bootload程序的可能 1&#xff0c;根据ch552g的使用手册内容查看到 2&#xff0c;在下面的参考文件的IAP文件夹中看到IAP文件 参考 下面程序中并没有跳转到厂家bootload的过程&#xff0c;这是直接通过控制有关的寄存器对FLSH进行直接写入和修改&#xff0c;这样可以认…

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么&#xff1f;学习Hadoop的"糙快猛"之道1. 不要追求完美&#xff0c;先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进&#xff0c;建立知识体系 构建您的Hadoop技能树1. 夯实基础&#xff1a;Linux和Java2. 深入理解HDFS3.…

AI 应用还没有大量出现,缺什么?缺聊天机器人编程语言 | Chatopera

只有帮助人发挥创意的才是大市场 现在是需要大量的 AI 应用了。如何产生大量的 AI 应用呢&#xff1f;当年乔布斯说&#xff0c;他看到了个人电脑的两个趋势&#xff0c;一个是图形化用户界面&#xff0c;一个是面向对象编程语言。今天&#xff0c;AI 应用也是新的【图形用户界…

【QT】label中添加QImage图片并旋转(水平翻转、垂直翻转、顺时针旋转、逆时针旋转)

目录 0.简介 1.详细代码及解释 1&#xff09;原label显示在界面上 2&#xff09;水平翻转 3&#xff09;垂直翻转 4&#xff09;顺时针旋转45度 5&#xff09;逆时针旋转 0.简介 环境&#xff1a;windows11 QtCreator 背景&#xff1a;demo&#xff0c;父类为QWidget&a…

Cisco 路由重发布 —— 实现路由信息在不同路由选择域间的传递

一、技术背景 在实际的组网中&#xff0c;可能会遇到这样一个场景&#xff1a;在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备&#xff0c;使用 EIGRP 协议将网络的路由打通。但是后来网络扩容&#xff0c;增加了一批华为的设备&#…