列表

详情


1120. 子树的最大平均值

给你一棵二叉树的根节点 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,那么该结果将被视为正确答案。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: double maximumAverageSubtree(TreeNode* root) { } };

golang 解法, 执行用时: 8 ms, 内存消耗: 5.7 MB, 提交时间: 2023-10-22 08:41:39

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maximumAverageSubtree(root *TreeNode) float64 {
    var res float64 = 0.0
    helper(root, &res)
    return res
}

func helper(node *TreeNode, res *float64) int {
    if node == nil {
        return 0
    }
    left := helper(node.Left, res)
    right := helper(node.Right, res)
    if node.Left != nil { node.Val += node.Left.Val }
    if node.Right != nil { node.Val += node.Right.Val }
    count := left + right + 1
    *res = math.Max(*res, float64(node.Val)/float64(count))
    return count
}

cpp 解法, 执行用时: 16 ms, 内存消耗: 21.8 MB, 提交时间: 2023-10-22 08:41:21

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    pair<int, int> helper(TreeNode* root, double& res) {
        if (root == NULL) return {0, 0};
        auto pl = helper(root->left, res);
        auto pr = helper(root->right, res);
        int count = pl.first + pr.first + 1;
        int sum = pl.second + pr.second + root->val;
        res = max(res, 1.0 * sum / count);
        return {count, sum};
    }
    double maximumAverageSubtree(TreeNode* root) {
        double res = 0;
        helper(root, res);
        return res;
    }
};

python3 解法, 执行用时: 44 ms, 内存消耗: 19.5 MB, 提交时间: 2023-10-22 08:40:32

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maximumAverageSubtree(self, root: TreeNode) -> float:
        ans = float('-inf')

        def dfs(node):
            nonlocal ans
            if not node:
                return 0, 0
            left_sum, left_count = dfs(node.left)
            right_sum, right_count = dfs(node.right)
            cur_sum = left_sum + right_sum + node.val
            cur_count = left_count + right_count + 1
            ans = max(ans, cur_sum / cur_count)
            return cur_sum, cur_count

        dfs(root)
        return ans

java 解法, 执行用时: 0 ms, 内存消耗: 42.2 MB, 提交时间: 2023-10-22 08:40:15

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    double res = 0;

    public double maximumAverageSubtree(TreeNode root) {
        if (root == null) return 0;
        helper(root);
        return res;
    }

    private int[] helper(TreeNode root) {
        int[] arr = new int[2];
        if (root == null) return arr;
        int[] left = helper(root.left);
        int[] right = helper(root.right);
        //设置当前树的元素和
        arr[0] = left[0] + right[0] + root.val;
        //设置节点个数
        arr[1] = left[1] + right[1] + 1;
        //更新平均值
        res = Math.max(res,(double) arr[0] / arr[1]);
        return arr;
    }
}

上一题