文章目录
- 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。提示:
树中的节点数介于 1 到 5000之间。
每个节点的值介于 0 到 100000 之间。
如果结果与标准答案的误差不超过 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,节点个数0auto 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
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!