【刷题日记】515. 在每个树行中找最大值

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情

本次刷题日记的第 76 篇,力扣题为:515. 在每个树行中找最大值 ,中等

一、题目描述:

又是一个在二叉树中查找数据的题,515. 在每个树行中找最大值 , 看看我们可以如何找

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

  1. 在每个树行中找最大值,给我们提出了哪些要求,具体来查看一下:
  • 题目给出一颗二叉树,树上的节点存储的是整型的数字,有正数有负数
  • 要求我们找到每一层的所有节点中的最大值,并存入结果集中,最后返回这棵树每一层的最大值节点值

分析

题目简洁,要求也很明确,实际上也很容易做

看到题目要求的是找到每一层的的最大值,其实第一反应还是想到的是层序遍历的方式,也就是广度优先算法来处理这道题

我们知道,是用广度优先算法遍历二叉树,实际上就是使用队列的方式,将二叉树的所有节点逐个加入到队列中,然后再逐个节点出队,知道队列为空,咱们就完成了一次二叉树的遍历

那么对应到本题,咱们需要如何去实现呢?

以前使用广度优先算法遍历二叉树,我们都是一个节点一个节点的入队和出队,这一次因为我们需要找到一层节点中的最大值

因此我们需要一层一层节点的出队,并计算最大值

从上图中,我们可以很清晰的知道,如果我们按照先让二叉树的左子树入队,再让右子树入队的话,那么就会上述我们看到的效果

当拿到每一层的所有节点的时候,计算最小值,岂不是一个很简单的事情了

那么,之前我们也说到过,能够使用深度优先算法的地方,必然是可以使用广度优先算法的,那么在这里也是同样的道理,能够使用广度优先算法的地方,必然也是可以使用深度优先算法的

关于 DFS 如何去实现这道题,兄弟们就可以思考一波

三、编码

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

编码的时候需要注意的是,咱们出队需要一层一层的出队,然后再计算这一层中数值最大的一个节点,并加入到结果集

编码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func largestValues(root *TreeNode) []int {
    if root == nil{
        return []int{}
    }
    // 保证 root 节点是有有效的
    que := []*TreeNode{root}
    var res []int
    for len(que) > 0 {
    // 将每一层的节点都给到 tmp
        tmp := que
        que = nil
        maxVal := math.MinInt32
        // 遍历 tmp ,且找到这一层的最大值
        for _,node := range tmp {
            maxVal = max(maxVal, node.Val)
            if node.Left != nil{
                que = append(que, node.Left)
            }

            if node.Right != nil {
                 que = append(que, node.Right)
            }
        }
        res = append(res, maxVal)
    }

    return res
}

func max(a,b int) int {
    if a > b {
        return a
    }
    return b
}

四、总结:

很明显,时间复杂度是 O(n) ,咱们使用广度优先算法,是将二叉树的每一个节点全部遍历了一遍

空间复杂度,这里我们可以看到,我们创建的 tmp 会存储每一层的节点数据,且 res 记录了每一层的最大值,总的来说,占用了 O(n) 级别的空间消耗,则空间复杂度是 O(n)

原题地址:515. 在每个树行中找最大值

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

暂时无法在飞书文档外展示此内容

猜你喜欢

转载自juejin.im/post/7113361896404680740
今日推荐