LeetCode 1120. 子树的最大平均值(DFS自底向上)

    技术2025-05-17  53

    文章目录

    1. 题目2. 解题

    1. 题目

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

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

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

    示例:

    输入:[5,6,1] 输出:6.00000 解释: 以 value = 5 的节点作为子树的根节点,得到的平均值为 (5 + 6 + 1) / 3 = 4。 以 value = 6 的节点作为子树的根节点,得到的平均值为 6 / 1 = 6。 以 value = 1 的节点作为子树的根节点,得到的平均值为 1 / 1 = 1。 所以答案取最大值 6。 提示: 树中的节点数介于 15000之间。 每个节点的值介于 0100000 之间。 如果结果与标准答案的误差不超过 10^-5,那么该结果将被视为正确答案。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-average-subtree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    2. 解题

    class Solution { double maxAVG = 0.0; public: double maximumAverageSubtree(TreeNode* root) { dfs(root); return maxAVG; } vector<int> dfs(TreeNode* root) { if(!root) return {0, 0};//空节点的和 0,节点个数0 auto l = dfs(root->left);//钻到最底下去 auto r = dfs(root->right); int n = 1+l[1]+r[1];//总节点个数 int sum = root->val+l[0]+r[0];//子树的和 double avg = sum/double(n); if(avg > maxAVG) maxAVG = avg; return {sum, n}; } };

    40 ms 35.5 MB


    我的博客地址 https://michael.blog.csdn.net/

    长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

    Processed: 0.016, SQL: 9