【刷题日记】1302. 层数最深叶子节点的和

简介: 【刷题日记】1302. 层数最深叶子节点的和

本次刷题日记的第 95 篇,力扣题为:1302. 层数最深叶子节点的和

一、题目描述:

又是一个二叉树类型的题目,看看需要咱们如何来解决它

image.png

二、这道题考察了什么思想?你的思路是什么?

题目要求咱们找层数最深的叶子节点的和

题目的要求很明确,咱们需要注意的点有这些:

  • 题目要求找深度最深的叶子节点,那么八成是需要使用深度优先算法来进行处理的
  • 求解深度最深的叶子节点的和,也就意味着,第一我们要先找到二叉树的最深深度是多少,并且对于这一层上的节点有多少个即取他们的和即可

分析

其实仔细看来,自然是咱们可以有 2 种二叉树遍历方式来处理这个题,如果是使用层序遍历的话,会更加形象

如果咱们是使用层序遍历的方式来处理题目的话,实际上就直接正常遍历二叉树即可,遍历到最后一层的时候,直接闭着眼睛将这最后一层节点相加即可得到结果,例如这样

image.png

层序遍历的时候,咱们一般是使用队列的方式来进行处理,将每一层的节点挨个全部放到队列中,然后全部取出进行遍历,再将下一层的所有节点全部加入到队列中,循环往复,直到队列为空,咱们直接就将最后一层的节点全部取出来求和即可

那么深度优先遍历二叉树的话我们又需要如何去处理呢?

深度优先,我们知道,咋是从 root 节点开始,不停的去一层一层的递归,那么这个时候,咱们可以零 root 节点这一层深度为 0,那么往下递归一层深度就 +1,且这个时候咱们使用一个变量 maxLevel 看来记录当前的最大层,若更新这个最大层,则 sum 直接赋值为当前节点的值,若节点递归的时候,等于最大层,那么就sum += 当前节点的值

这样的思考方式和实现方式,如果一直在递归,maxLevel 的值一直在增大,那么 sum 的值一直在被刷新,只有当找到树的最大层的时候,sum 才会开始相加,则最终遍历完毕后, sum 即为深度最深的的叶子节点的和了

例如咱们遍历二叉树,使用 前序遍历的方式

image.png

就这么来看,咱们的如上两种方式,广度优先算法,深度优先算法 来处理这个题,接下来咱们就来手撸代码吧,写一个深度优先算法的

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

  • 使用深度优先算法的话,咱们需要记录当前节点所在的层次

编码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func deepestLeavesSum(root *TreeNode) (sum int) {
    maxLevel := -1
    var dfs func(*TreeNode, int)
    dfs = func(node *TreeNode, level int) {
        if node == nil {
            return
        }
        if level > maxLevel {
            maxLevel = level
            sum = node.Val
        } else if level == maxLevel {
            sum += node.Val
        }
        dfs(node.Left, level+1)
        dfs(node.Right, level+1)
    }
    dfs(root, 0)
    return
}

四、总结:

image.png

咱们这种处理方式的时间复杂度是 O(n) ,具体是因为咱们的递归了所有了节点才能得出结果,因此是 O(n)

空间复杂度也是 O(n) ,因此咱们的递归是需要消耗栈空间的

原题地址:1302. 层数最深叶子节点的和

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
Linux Python
bypy:使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备)
bypy:使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备)
bypy:使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备)
|
API
【工具推荐】 Obsidian 插件 Obsidian to Flomo 一键同步内容到 Flomo 插件
Obsidian to Flomo 是一款可以一键发送内容到 Flomo 的Obsidian 插件。
1177 0
|
存储 网络协议 关系型数据库
nacos技术分享
Nacos作为服务发现中心,具备更多的功能支持项,且从长远来看Nacos在以后的版本会 支持SpringCLoud+Kubernetes的组合,填补 2 者的鸿沟,在两套体系下可以采用同一套服务发现和配置管理的解 决方案,这将大大的简化使用和维护的成本。另外,Nacos 计划实现 Service Mesh,也是未来微服务发展的趋 势。
711 0
nacos技术分享
|
JSON API 数据安全/隐私保护
|
7月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制
YOLOv11改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制
1999 2
YOLOv11改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制
|
7月前
|
自然语言处理 算法 机器人
2025年热门智能客服机器人评测:哪款更好用?
2025年,智能客服机器人市场竞争激烈,功能日益强大。主要品牌如合力亿捷、阿里云、华为云、京东京小智和小米商城等纷纷推出具备精准语音识别、语义理解、多渠道接入等功能的产品,广泛应用于电商、金融、零售等领域,显著提升客服效率与客户满意度,降低企业运营成本。
459 0
|
9月前
|
安全 Linux KVM
Linux虚拟化技术:从Xen到KVM
Xen和KVM是Linux平台上两种主要的虚拟化技术,各有优缺点和适用场景。通过对比两者的架构、性能、安全性、管理复杂性和硬件依赖性,可以更好地理解它们的适用场景和选择依据。无论是高性能计算、企业虚拟化还是云计算平台,合理选择和配置虚拟化技术是实现高效、稳定和安全IT环境的关键。
423 8
顺序表的插入,删除,修改和查找(详细解析)
顺序表的插入,删除,修改和查找(详细解析)
191 5
|
自然语言处理 搜索推荐 算法
Python小说阅读器制作教程
Python小说阅读器制作教程
390 0
|
存储 移动开发 weex
Flutter 新一代图形渲染器 Impeller
Flutter 新一代图形渲染器 Impeller
1064 0
Flutter 新一代图形渲染器 Impeller