zoukankan      html  css  js  c++  java
  • [Swift]LeetCode1161. 最大层内元素和 | Maximum Level Sum of a Binary Tree

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

    Given the root of a binary tree, the level of its root is 1, the level of its children is 2, and so on.

    Return the smallest level X such that the sum of all the values of nodes at level X is maximal.

    Example 1:

    Input: [1,7,0,7,-8,null,null]
    Output: 2
    Explanation: 
    Level 1 sum = 1.
    Level 2 sum = 7 + 0 = 7.
    Level 3 sum = 7 + -8 = -1.
    So we return the level with the maximum sum which is level 2.

    Note:

    1. The number of nodes in the given tree is between 1 and 10^4.
    2. -10^5 <= node.val <= 10^5

    给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。

    请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

    示例:

    输入:[1,7,0,7,-8,null,null]
    输出:2
    解释:
    第 1 层各元素之和为 1,
    第 2 层各元素之和为 7 + 0 = 7,
    第 3 层各元素之和为 7 + -8 = -1,
    所以我们返回第 2 层的层号,它的层内元素之和最大。

    提示:

    1. 树中的节点数介于 1 和 10^4 之间
    2. -10^5 <= node.val <= 10^5

    740ms
     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     var levels: [Int] = []
    16     func maxLevelSum(_ root: TreeNode?) -> Int {
    17         traverse(root, 0)
    18         var maxValue = root!.val
    19         var maxValueIndex = 0
    20         for (index, level) in levels.enumerated() {
    21             if level > maxValue {
    22                 maxValue = level
    23                 maxValueIndex = index
    24             }
    25         }
    26         return maxValueIndex + 1
    27     }
    28     
    29     func traverse(_ node: TreeNode?, _ level: Int) {
    30         if let node = node {
    31             if level >= levels.count {
    32                 levels.append(0)
    33             }
    34             levels[level] += node.val
    35             traverse(node.left, level + 1)
    36             traverse(node.right, level + 1)
    37         }
    38     }
    39 }

    764ms

     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 maxLevelSum(_ root: TreeNode?) -> Int {
    16         var levels: [Int: Int] = [:]
    17         dfs(node: root, depth: 1, levels: &levels)
    18         var result = 0
    19         var maximum = levels[0] ?? Int.min
    20         for level in levels {
    21             if maximum < (level.value ?? Int.min) {
    22                 // new minimum
    23                 maximum = (level.value ?? Int.min)
    24                 result = level.key
    25             }
    26         }
    27         
    28         return result
    29     }
    30     
    31     private func dfs(node: TreeNode?, depth: Int, levels: inout [Int: Int]) {
    32         guard let node = node else { return }
    33         
    34         levels[depth] = (levels[depth] ?? 0) + node.val
    35         
    36         dfs(node: node.left, depth: depth + 1, levels: &levels)
    37         dfs(node: node.right, depth: depth + 1, levels: &levels)
    38     }
    39 }

    808ms

     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   var maxs = [Int](repeating: 0, count: 10001)
    16   func maxLevelSum(_ root: TreeNode?) -> Int {
    17     helper(root, 1)
    18     return maxs.enumerated().max { (a, b) -> Bool in
    19       a.element <= b.element
    20     }!.offset
    21   }
    22   
    23   func helper(_ node: TreeNode?, _ lvl: Int) {
    24     guard let n = node else {
    25       return
    26     }
    27     maxs[lvl] += n.val
    28     helper(n.right, lvl + 1)
    29     helper(n.left, lvl + 1)
    30   }
    31 }

    Runtime: 828 ms

    Memory Usage: 21 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     var s:[Int:Int] = [Int:Int]()
    16     func maxLevelSum(_ root: TreeNode?) -> Int {
    17         dfs(root,1)
    18         var best:Int = s[1,default:0]
    19         var v:Int = 1
    20         for (key,val) in s
    21         {
    22             if val > best
    23             {
    24                 best = val
    25                 v = key
    26             }            
    27         }
    28         return v
    29     }
    30     
    31     func dfs(_ root: TreeNode?,_ level:Int)
    32     {
    33         if root == nil {return}
    34         dfs(root!.left, level + 1)
    35         dfs(root!.right, level + 1)
    36         s[level,default:0] += root!.val
    37     }
    38 }
  • 相关阅读:
    css优先级及匹配原理
    [BZOJ1208]宠物收养所
    [BZOJ1588]营业额统计
    [AtCoder2558]Many Moves
    [POJ3416]Crossing
    [POJ3378]Crazy Thairs
    高精度大整数模板
    py3实现维吉尼亚加解密
    Codeforces 617E: XOR and Favorite Number(莫队算法)
    hdu 1695: GCD 【莫比乌斯反演】
  • 原文地址:https://www.cnblogs.com/strengthen/p/11371957.html
Copyright © 2011-2022 走看看