zoukankan      html  css  js  c++  java
  • [Swift]LeetCode515. 在每个树行中找最大值 | Find Largest Value in Each Tree Row

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10397209.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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]

    您需要在二叉树的每一行中找到最大的值。

    示例:

    输入: 
    
              1
             / 
            3   2
           /      
          5   3   9 
    
    输出: [1, 3, 9]

    48ms
     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         guard let rootNode = root else {
    17             return []
    18         }
    19         var result: [Int] = []
    20         var originallist: [TreeNode] = [rootNode]
    21         
    22         while !originallist.isEmpty {
    23             var tempList: [TreeNode] = originallist
    24             originallist.removeAll()
    25             var tempvalue: Int = Int.min
    26             for var node: TreeNode in tempList {
    27                 tempvalue = max(tempvalue,node.val)
    28                 if let left: TreeNode = node.left {
    29                     originallist.append(left)
    30                 }
    31                 if let right: TreeNode = node.right {
    32                     originallist.append(right)
    33                 }
    34             }
    35             result.append(tempvalue)
    36         }
    37         return  result        
    38     }
    39 }

    56ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         guard let root = root else {
    17             return []
    18         }
    19         var maxVals: [Int] = [root.val]
    20         getMaxValues(root, 0, &maxVals)
    21         return maxVals
    22     }
    23     
    24     func getMaxValues(_ root: TreeNode, _ currentLevel: Int, _ maxVals: inout [Int]) {
    25         if maxVals.count > currentLevel {
    26             if root.val > maxVals[currentLevel] {
    27                 maxVals[currentLevel] = root.val
    28             }
    29         } else {
    30             maxVals.append(root.val)
    31         }
    32         
    33         if let left = root.left {
    34             getMaxValues(left, currentLevel + 1, &maxVals)
    35         }
    36         if let right = root.right {
    37             getMaxValues(right, currentLevel + 1, &maxVals)
    38         }
    39     }
    40 }

    Runtime: 60 ms
    Memory Usage: 20.3 MB
     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         if root == nil {return []}
    17         var res:[Int] = [Int]()
    18         helper(root,1,&res)
    19         return res
    20     }
    21     
    22     func helper(_ root: TreeNode?,_ depth:Int,_ res:inout [Int])
    23     {
    24         if depth > res.count {res.append(root!.val)}
    25         else {res[depth - 1] = max(res[depth - 1], root!.val)}
    26         if root!.left != nil {helper(root!.left, depth + 1, &res)}
    27         if root!.right != nil {helper(root!.right, depth + 1, &res)}
    28     }
    29 }

    68ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         if root == nil {
    17             return []
    18         }
    19         var maxVal = Int.min
    20         var maxArray = [Int]()
    21         var queue = [TreeNode?]()
    22         queue.append(root)
    23         queue.append(nil)
    24         
    25         while !queue.isEmpty {
    26             var node = queue.removeFirst()
    27             if node == nil {
    28                 maxArray.append(maxVal)
    29                 maxVal = Int.min
    30                 if !queue.isEmpty {
    31                     queue.append(nil)
    32                 }
    33             } else {
    34                 maxVal = max(maxVal, node?.val ?? 0)
    35                 if node?.left != nil {
    36                     queue.append(node?.left)
    37                 }
    38             
    39                 if node?.right != nil {
    40                     queue.append(node?.right)
    41                 }
    42             }
    43         }
    44         return maxArray
    45     }
    46 }

    72ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         guard let root = root else { return [] }
    17         var queue = [TreeNode]()
    18         queue.append(root)
    19         var result = [root.val]
    20         while !queue.isEmpty {
    21             var maximum = Int.min
    22             var tmpQueue = [TreeNode]()
    23             while !queue.isEmpty {
    24                 let node = queue[0]
    25                 queue.removeFirst()
    26                 if let left = node.left {
    27                     tmpQueue.append(left)
    28                     maximum = max(maximum, left.val)
    29                 }
    30                 if let right = node.right {
    31                     tmpQueue.append(right)
    32                     maximum = max(maximum, right.val)
    33                 }
    34 
    35             }
    36             if !tmpQueue.isEmpty {
    37                 result.append(maximum)
    38             }
    39             queue = tmpQueue
    40         }
    41         return result
    42     }
    43 }

    76ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {        
    16         var q = [TreeNode?]()
    17         var remainingNodesInLevel = 0
    18         var maxNums = [Int]()    
    19         q.append(root)        
    20         while q.count > 0 {            
    21             remainingNodesInLevel = q.count            
    22             var levelNodeValues = [Int]()
    23             while remainingNodesInLevel > 0 {                
    24                 guard let peek = q.first else { break }
    25                 q.removeFirst()                
    26                 if let p = peek {                    
    27                     levelNodeValues.append(p.val)
    28                     if p.left != nil { q.append(p.left) }
    29                     if p.right != nil { q.append(p.right) }                    
    30                     remainingNodesInLevel -= 1
    31                 } else {
    32                     break
    33                 }
    34             }            
    35             levelNodeValues = levelNodeValues.sorted {$0 > $1}
    36             if let max = levelNodeValues.first {
    37                 maxNums.append(max)
    38             }            
    39         }        
    40         return maxNums        
    41     }
    42 }

    128ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func largestValues(_ root: TreeNode?) -> [Int] {
    16         if root == nil {
    17             return [Int]()
    18         }
    19         var queue = [(TreeNode, Int)]()
    20         var result = [Int]()
    21         queue.append((root!, 0))
    22         while queue.count > 0 {
    23             let set = queue.removeFirst()
    24             if result.count <= set.1 {
    25                 result.append(set.0.val)
    26             } else {
    27                 result[set.1] = max(result[set.1], set.0.val)
    28             }
    29             if set.0.left != nil {
    30                 queue.append((set.0.left!, set.1 + 1))
    31             }
    32             if set.0.right != nil {
    33                 queue.append((set.0.right!, set.1 + 1))
    34             }
    35         }        
    36         return result
    37     }
    38 }
  • 相关阅读:
    Linq的Except
    BZOJ 1324 Exca神剑 最小割
    先学习Oracle 11g的Automatic Diagnostic Repository新功能
    NYOJ 300 &amp;&amp; hdu 2276 Kiki &amp; Little Kiki 2 (矩阵高速功率)
    V微软S2015下载:开展Win10/Linux/iOS多平台软件
    LeetCode Length of Last Word
    QT 打开文件对话框汇总
    取缔Chrome装载电脑管家的广告过滤脚本代码
    三种常见的图像处理双三次插值算法
    Best Time to Buy and Sell Stock I,II,III [leetcode]
  • 原文地址:https://www.cnblogs.com/strengthen/p/10397209.html
Copyright © 2011-2022 走看看