【LeetCode(Java) - 1120】子树的最大平均值

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;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_29051413/article/details/108560032
今日推荐