​LeetCode刷题实战515:在每个树行中找最大值

2022-03-03 16:01:21 浏览数 (1)

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试 算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 在每个树行中找最大值,我们先来看题面:

https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/

Given the root of a binary tree, return an array of the largest value in each row of the tree (0-indexed).

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

示例

解题

https://blog.csdn.net/qq_35655602/article/details/109520323

方法一:BFS(按照层序遍历的思想,进行广度优先遍历)

代码语言:javascript复制
class Solution {
     public List<Integer> largestValues(TreeNode root) {
        //LinkedList实现队列
        Queue<TreeNode> queue = new LinkedList<>();
        List<Integer> values = new ArrayList<>();
        if (root != null)
            queue.add(root);//入队
        while (!queue.isEmpty()) {
            int max = Integer.MIN_VALUE;
            int levelSize = queue.size();//每一层的数量
            for (int i = 0; i < levelSize; i  ) {
                TreeNode node = queue.poll();//出队
                max = Math.max(max, node.val);//记录每层的最大值
                if (node.left != null)
                    queue.add(node.left);
                if (node.right != null)
                    queue.add(node.right);
            }
            values.add(max);
        }
        return values;
    }

}

方法二:DFS

代码语言:javascript复制
class Solution {
        public List<Integer> largestValues(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        helper(root, res, 1);
        return res;
    }
    //level表示的是第几层,集合res中的第一个数据表示的是
    // 第一层的最大值,第二个数据表示的是第二层的最大值……
    private void helper(TreeNode root, List<Integer> res, int level) {
        if (root == null)
            return;
        //如果走到下一层了直接加入到集合中
        if (level == res.size()   1) {
            res.add(root.val);
        } else {
            //注意:我们的level是从1开始的,也就是说root
            // 是第一层,而集合list的下标是从0开始的,
            // 所以这里level要减1。
            // Math.max(res.get(level - 1), root.val)表示的
            // 是遍历到的第level层的root.val值和集合中的第level
            // 个元素的值哪个大,就要哪个。
            res.set(level - 1, Math.max(res.get(level - 1), root.val));
        }
        //下面两行是DFS的核心代码
        helper(root.left, res, level   1);
        helper(root.right, res, level   1);
    }

}

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-500题汇总,希望对你有点帮助!

LeetCode刷题实战501:二叉搜索树中的众数

LeetCode刷题实战502:IPO

LeetCode刷题实战503:下一个更大元素 II

LeetCode刷题实战504:七进制数

LeetCode刷题实战505:迷宫II

LeetCode刷题实战506:相对名次

LeetCode刷题实战507:完美数

LeetCode刷题实战508:出现次数最多的子树元素和

LeetCode刷题实战509:斐波那契数

LeetCode刷题实战510:二叉搜索树中的中序后继 II

LeetCode刷题实战511:游戏玩法分析 I

LeetCode刷题实战512:游戏玩法分析 II

LeetCode刷题实战513:找树左下角的值

0 人点赞