zoukankan      html  css  js  c++  java
  • [LeetCode] 515. 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).

    Example 1:

    Input: root = [1,3,2,5,3,null,9]
    Output: [1,3,9]
    

    Example 2:

    Input: root = [1,2,3]
    Output: [1,3]
    

    Example 3:

    Input: root = [1]
    Output: [1]
    

    Example 4:

    Input: root = [1,null,2]
    Output: [1,2]
    

    Example 5:

    Input: root = []
    Output: []

    Constraints:

    • The number of nodes in the tree will be in the range [0, 104].
    • -231 <= Node.val <= 231 - 1

    在每个树行中找最大值。

    题意是给一个二叉树,请返回每一层里最大的node.val。

    这道题其实很简单,BFS和DFS都能做,着重掌握DFS的方法。

    BFS

    就是普通的层序遍历,遍历的时候记录每一层上的最大值,放入结果集即可。

    时间O(n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public List<Integer> largestValues(TreeNode root) {
     3         List<Integer> res = new ArrayList<>();
     4         // corner case
     5         if (root == null) {
     6             return res;
     7         }
     8         // normal case
     9         Queue<TreeNode> queue = new LinkedList<>();
    10         queue.offer(root);
    11         while (!queue.isEmpty()) {
    12             int size = queue.size();
    13             int max = Integer.MIN_VALUE;
    14             for (int i = 0; i < size; i++) {
    15                 TreeNode cur = queue.poll();
    16                 max = Math.max(max, cur.val);
    17                 if (cur.left != null) {
    18                     queue.offer(cur.left);
    19                 }
    20                 if (cur.right != null) {
    21                     queue.offer(cur.right);
    22                 }
    23             }
    24             res.add(max);
    25         }
    26         return res;
    27     }
    28 }

    DFS

    DFS的做法是在比较当前结果集的 size 和树的深度 level。如果当前 res.size + 1 == level,说明 DFS 已经在处理下一层了,此时先把下一层的 root 节点放到结果集。在遍历当前层的时候,如果 res.size == level,则需要把结果集中当前层的那个最大值拿出来跟当前遍历到的节点值作比较,并把较大的那一个再更新回结果集。这里有一个有配图的题解,帮助理解 DFS 是怎么运行的。

    时间O(n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public List<Integer> largestValues(TreeNode root) {
     3         List<Integer> res = new ArrayList<>();
     4         // corner case
     5         if (root == null) {
     6             return res;
     7         }
     8         helper(res, root, 1);
     9         return res;
    10     }
    11 
    12     private void helper(List<Integer> res, TreeNode root, int depth) {
    13         if (root == null) {
    14             return;
    15         }
    16         if (depth == res.size() + 1) {
    17             res.add(root.val);
    18         } else {
    19             res.set(level - 1, Math.max(res.get(level - 1), root.val));
    20         }
    21         helper(res, root.left, depth + 1);
    22         helper(res, root.right, depth + 1);
    23     }
    24 }

    LeetCode 题目总结

  • 相关阅读:
    解决浏览器跨域限制方案之WebSocket
    解决浏览器跨域限制方案之CORS
    解决浏览器跨域限制方案之JSONP
    浏览器跨域限制概述
    tomcat cluster配置实战注意事项
    学习go语言编程系列之定义变量
    修改xshell的默认字间距和行间距
    学习go语言编程系列之helloworld
    hive操作语句使用详解
    Hive通过查询语句向表中插入数据注意事项
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13747968.html
Copyright © 2011-2022 走看看