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 }
  • 相关阅读:
    hdu 5392 Infoplane in Tina Town(数学)
    hdu 5391 Zball in Tina Town(打表找规律)
    poj 2251 Dungeon Master(bfs)
    hdu 5313 Bipartite Graph(dfs染色 或者 并查集)
    [转]notifyDataSetChanged() 动态更新ListView
    Android之Intent
    LinearLayout 和 RelativeLayout
    poj 2955 Brackets(区间dp)
    poj 1651 Multiplication Puzzle(区间dp)
    poj 3186 Treats for the Cows(区间dp)
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7903631.html
Copyright © 2011-2022 走看看