zoukankan      html  css  js  c++  java
  • LeetCode 515. Find Largest Value in Each Tree Row

    原题链接在这里:https://leetcode.com/problems/find-largest-value-in-each-tree-row/description/

    题目:

    You need to find the largest value in each row of a binary tree.

    Example:

    Input: 
    
              1
             / 
            3   2
           /      
          5   3   9 
    
    Output: [1, 3, 9]

    题解:

    可以采用BFS, 类似Binary Tree Level Order Traversal. 每层算最大值加入res中.

    Time Complexity: O(n).

    Space: O(n).

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public List<Integer> largestValues(TreeNode root) {
    12         List<Integer> res = new ArrayList<Integer>();
    13         if(root == null){
    14             return res;
    15         }
    16         
    17         LinkedList<TreeNode> que = new LinkedList<TreeNode>();
    18         que.add(root);
    19         int curCount = 1;
    20         int nextCount = 0;
    21         int curLevelMax = Integer.MIN_VALUE;
    22         while(!que.isEmpty()){
    23             TreeNode cur = que.poll();
    24             curCount--;
    25             curLevelMax = Math.max(curLevelMax, cur.val);
    26             
    27             if(cur.left != null){
    28                 que.add(cur.left);
    29                 nextCount++;
    30             }
    31             
    32             if(cur.right != null){
    33                 que.add(cur.right);
    34                 nextCount++;
    35             }
    36             
    37             if(curCount == 0){
    38                 curCount = nextCount;
    39                 nextCount = 0;
    40                 res.add(curLevelMax);
    41                 curLevelMax = Integer.MIN_VALUE;
    42             }
    43         }
    44         return res;
    45     }
    46 }

    也可以DFS. 用depth来标记res中的index位置.

    Time Complexity: O(n).

    Space: O(logn). stack space.

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public List<Integer> largestValues(TreeNode root) {
    12         List<Integer> res = new ArrayList<Integer>();
    13         if(root == null){
    14             return res;
    15         }
    16         
    17         dfs(root, res, 0);
    18         return res;
    19     }
    20     
    21     private void dfs(TreeNode root, List<Integer> res, int depth){
    22         if(root == null){
    23             return;
    24         }
    25         
    26         if(depth == res.size()){
    27             // 之前没有的碰到的深度.
    28             res.add(root.val);
    29         }else{
    30             // 之前有平级的深度.
    31             res.set(depth, Math.max(res.get(depth), root.val));
    32         }
    33         
    34         dfs(root.left, res, depth+1);
    35         dfs(root.right, res, depth+1);
    36     }
    37 }
  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7903631.html
Copyright © 2011-2022 走看看