zoukankan      html  css  js  c++  java
  • [Swift]LeetCode1120. 子树的最大平均值 | Maximum Average Subtree

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

    Given the root of a binary tree, find the maximum average value of any subtree of that tree.

    (A subtree of a tree is any node of that tree plus all its descendants. The average value of a tree is the sum of its values, divided by the number of nodes.) 

    Example 1:

    Input: [5,6,1]
    Output: 6.00000
    Explanation: 
    For the node with value = 5 we have and average of (5 + 6 + 1) / 3 = 4.
    For the node with value = 6 we have and average of 6 / 1 = 6.
    For the node with value = 1 we have and average of 1 / 1 = 1.
    So the answer is 6 which is the maximum.
    

    Note:

    1. The number of nodes in the tree is between 1 and 5000.
    2. Each node will have a value between 0 and 100000.
    3. Answers will be accepted as correct if they are within 10^-5 of the correct answer.

    给你一棵二叉树的根节点 root,找出这棵树的 每一棵 子树的 平均值 中的 最大 值。

    子树是树中的任意节点和它的所有后代构成的集合。

    树的平均值是树中节点值的总和除以节点数。 

    示例:

    输入:[5,6,1]
    输出:6.00000
    解释: 
    以 value = 5 的节点作为子树的根节点,得到的平均值为 (5 + 6 + 1) / 3 = 4。
    以 value = 6 的节点作为子树的根节点,得到的平均值为 6 / 1 = 6。
    以 value = 1 的节点作为子树的根节点,得到的平均值为 1 / 1 = 1。
    所以答案取最大值 6。 

    提示:

    1. 树中的节点数介于 1 到 5000之间。
    2. 每个节点的值介于 0 到 100000 之间。
    3. 如果结果与标准答案的误差不超过 10^-5,那么该结果将被视为正确答案。

    88ms

     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 ret:Double = 0
    16     func maximumAverageSubtree(_ root: TreeNode?) -> Double {
    17         if root == nil {return ret}
    18         dfs(root)
    19         return ret        
    20     }
    21     
    22     func dfs(_ root: TreeNode?) -> (Int,Int)
    23     {
    24         var cal:Int = 1
    25         var sum:Int = root!.val
    26         if root!.left != nil
    27         {
    28             var test:(Int,Int) = dfs(root!.left)
    29             cal += test.0
    30             sum += test.1
    31         }
    32         if root!.right != nil
    33         {
    34             var test:(Int,Int) = dfs(root!.right)
    35             cal += test.0
    36             sum += test.1
    37         }
    38         let temp:Double = Double(sum) / Double(cal)
    39         if ret < temp
    40         {
    41             ret = temp
    42         }
    43         return (cal, sum)
    44     }
    45 }
  • 相关阅读:
    迭代器
    装饰器
    函数对象和闭包
    函数的使用
    文件操作
    基本数据类型及内置方法
    MySQL数据库
    网络编程进阶(进程、线程、协程、IO模型)
    网络编程基础---网络通讯原理、ssh远程执行命令、粘包问题处理、文件传输处理
    面向对象、类、元类、封装、异常处理
  • 原文地址:https://www.cnblogs.com/strengthen/p/11179550.html
Copyright © 2011-2022 走看看