【刷题日记】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

好了,本次就到这里

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

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

相关文章
|
5月前
牛客网-树的子结构
牛客网-树的子结构
19 0
|
13天前
|
算法
二叉树刷题记(八-二叉树的最大深度-深度遍历)
二叉树刷题记(八-二叉树的最大深度-深度遍历)
|
13天前
二叉树刷题记(七-二叉树的右侧视图)
二叉树刷题记(七-二叉树的右侧视图)
|
1月前
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树2
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树2
|
1月前
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树1
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树
|
4月前
|
存储 算法 关系型数据库
【面试普通人VS高手系列】b树和b+树的理解
【面试普通人VS高手系列】b树和b+树的理解
|
6月前
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
30 0
|
11月前
|
算法 Java
代码随想录训练营day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 v...
代码随想录训练营day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 v...
|
12月前
|
前端开发 算法 API
[LeetCode算法]有了二叉树层序遍历,妈妈再也不用担心我不会做二叉树层级题了
博主最近在刷`leetcode`,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。
116 1
|
12月前
Leetcode1302–层数最深叶子结点的和(深搜/递归)
Leetcode1302–层数最深叶子结点的和(深搜/递归)