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;取…

准备跳槽了(仍然底层为主,ue独立游戏为辅)

思考再三&#xff0c;准备跳槽了。 一、跳槽原因&#xff1a; 今年经济形势非常不好。那我为什么还要跳槽呢&#xff1f;因为干不下去了。公司是末位淘汰制&#xff0c;而我绩效垫底了。给我的整改措施中&#xff0c;部门经理让我三个月搞定60个bug&#xff0c;我觉得简直是送…

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

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

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

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

java中double类型1+1.82保留的很多小数如何处理

问题描述&#xff1a; Java处理Double类型数据相加时&#xff0c;出现11.822.8200000000000003并存入数据库的情况 问题原因&#xff1a; 在计算机中&#xff0c;浮点数&#xff08;如1.82&#xff09;通常用二进制形式表示&#xff0c;而这种表示方式可能会导致精度丢失&…

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

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

iOS 左滑返回事件的控制

0x00 视图结构 1-根视图 1.1-控制器A 1.1.1-控制器B 1.1.1.1-控制器C 0x01 控制 通过设置 self.navigationController.interactivePopGestureRecognizer.enabled 为 YES 或 NO 来控制当面界面&#xff0c;是否能左滑返回 在 控制器B 的生命周期方法内&#xff0c;设置属性 s…

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

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

机器学习数据集的一致性表现在哪些方面-九五小庞

数据集的一致性是机器学习和数据分析领域中一个重要的概念&#xff0c;它主要体现在以下几个方面&#xff1a; 特征分布一致性 单变量分布&#xff1a;训练集和测试集中各个特征的分布情况应相似。例如&#xff0c;如果某一个数值特征在训练集中是正态分布&#xff0c;那么在…

【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项目的微信开发者工具配置…

力扣LCR184.设计自助结算系统

力扣LCR184.设计自助结算系统 一个队列存所有value 一个数组模拟单调队列存区间最大值 const int N 100010;int a[N];class Checkout {queue<int> q;int hh0,tt-1;public:Checkout() {}int get_max() {if(hh > tt) return -1;return a[hh];}void add(int value) {…

在实际应用中,systemverilog相比vefilog2000有哪些重大的提升

SystemVerilog 相较于 Verilog-2000 有多项重大提升&#xff0c;这些提升使得 SystemVerilog 成为更强大的硬件描述和验证语言。以下是一些关键的改进&#xff1a; 数据类型扩展&#xff1a; SystemVerilog 引入了 logic 数据类型&#xff0c;可以替代 Verilog-2000 中的 wire …

41 QOS技术(服务质量)

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

皮尔逊相关系数

皮尔逊相关系数 一、统计学知识 期望值&#xff1a; E ( X ) E(X) E(X)表示随机变量 X \textit X X的期望值。 E ( X ) X ‾ 1 n ∑ i 1 n X i \mathrm{E(X) \overline{X} \frac{1}{n} \sum_{i1}^{n} X_i} E(X)Xn1​i1∑n​Xi​ 方差&#xff1a;衡量一组数据的离散程度…

【代码随想录|第十一章 图论part01 | 797.所有可能的路径 】

代码随想录|第十一章 图论part01 | 图论理论基础&#xff0c;797.所有可能的路径&#xff0c;广搜理论基础 一、图论理论基础1.图的基本概念2.图的构造1&#xff09;邻接矩阵2&#xff09;邻接表 3.图的遍历方式4.深度优先搜索理论基础 二、797.所有可能的路径1.核心代码2.问题…

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;返回和方法同名的…

Mysql中delete数据后磁盘空间浅析

在MySQL中&#xff0c;使用DELETE语句删除数据后&#xff0c;磁盘上的文件不会立即缩小&#xff0c;因为MySQL通常不会重建文件并删除不再使用的空间。这是因为DELETE操作只标记已删除的数据为可重用&#xff0c;并不立即清除物理存储空间。 为了释放磁盘空间&#xff0c;你需要…