给你一棵二叉树的根节点 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
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