在每个树行中找最大值

简介: 在每个树行中找最大值

一、题目描述:

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

示例1:

image.png

输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
示例2:

输入: root = [1,2,3]
输出: [1,3]

提示:

二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-largest-value-in-each-tree-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

深度优先遍历 BFS

需要一个队列,先进先出的按层级遍历二叉树
需要levelSize变量维护当前层剩余大小。每当levelSize==0时,说明某层遍历结束,准备进入下一层。
空节点不能加入队列,否则会影响计算当前层大小
先加入子节点,再更新levelSize,否则会影响计算下一层大小

class Solution {
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if(root == null) 
            return ans;
        Deque<TreeNode> que = new ArrayDeque<>();
        que.addLast(root);
        while(!que.isEmpty()){
            int sz = que.size();
            int tmp = Integer.MIN_VALUE;
            while(sz-->0){
                TreeNode node = que.pollFirst();
                tmp = Math.max(tmp, node.val);
                if(node.left!=null) que.addLast(node.left);
                if(node.right!=null) que.addLast(node.right);
            }
            ans.add(tmp);
        }
        return ans;
    }

}

广度优先遍历(层序遍历)DFS

定义一个队列 queue 来存放节点
遍历队列,挨个节点从头部取出
记录取出的节点数值 val 中的最大值 max,如果有左右节点再加入队列,供下一次遍历使用
最后队列长度为 0 即遍历结束

class Solution {
    int[] map;
    int maxDepth = 0;
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if(root == null) 
            return ans;
        map = new int[10002];
        Arrays.fill(map, Integer.MIN_VALUE);
        dfs(root, 0);
        for(int i=0;i<=maxDepth;i++)
            ans.add(map[i]);
        return ans;
    }
    public void dfs(TreeNode node, int depth){
        if(node == null) 
            return;
        if(depth > maxDepth)
            maxDepth = depth;
        map[depth] = Math.max(map[depth], node.val);
        dfs(node.left, depth+1);
        dfs(node.right, depth+1);
    }
}

四、总结:

image.png
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助,期待您找到心意的工作和满意的offer

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起

相关文章
|
3月前
PTA-求n个数的最大值、最小值、平均值
求n个数的最大值、最小值、平均值
51 2
|
11天前
|
弹性计算 运维 算法
证书编号最大值
【4月更文挑战第30天】
11 0
|
11天前
lamba统计最大值,最小值,平均值,总和,个数
lamba统计最大值,最小值,平均值,总和,个数
|
3月前
PTA-求n个数的平均值最大值最小值问题
求n个数的平均值最大值最小值问题
24 0
|
4月前
|
算法 Java 测试技术
连号区间数
连号区间数
22 0
|
9月前
wustojc1002求2个整数最大值
wustojc1002求2个整数最大值
26 0
|
5月前
不用数组求多个数的最小值
不用数组求多个数的最小值
18 0
|
9月前
7-10 求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
82 0
|
11月前
|
算法
找出三个最大值求乘积
找出三个最大值求乘积
54 0
|
11月前
|
C++
acwing 716. 最大数和它的位置 int的最大值和最小值
acwing 716. 最大数和它的位置 int的最大值和最小值
56 0