1、题目描述
2、解题思路
求某个子树的平均值得知道两个值:这颗子树的所有元素和、这颗子树的所有元素的个数。
定义一个函数 helper(node) ,它返回一个数组 arr[],其中 arr[0] 表示以 node 为根节点的子树的所有元素和,arr[1] 表示以 node 为根节点的子树的所有元素的个数。
于是,求平均值直接拿这两个数相除即可。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
double maxMean = 0;
public double maximumAverageSubtree(TreeNode root) {
if (root == null) return 0;
helper(root);
return maxMean;
}
private int[] helper(TreeNode root) {
// arr[0] 保存当前节点所表示的子树元素之和,arr[1] 表示当前节点表示的子树的元素个数
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;
//更新平均值
maxMean = Math.max(maxMean, (double) arr[0] / arr[1]);
return arr;
}
}