[LintCode] 597. Subtree with Maximum Average

Posted xuanlu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode] 597. Subtree with Maximum Average相关的知识,希望对你有一定的参考价值。

Given a binary tree, find the subtree with maximum average. Return the root of the subtree.

 

Example 1

Input:
{1,-5,11,1,2,4,-2}
Output:11
Explanation:
The tree is look like this:
     1
   /    -5     11
 /    /  1   2 4    -2 
The average of subtree of 11 is 4.3333, is the maximun.

Example 2

Input:
{1,-5,11}
Output:11
Explanation:
     1
   /    -5     11
The average of subtree of 1,-5,11 is 2.333,-5,11. So the subtree of 11 is the maximun.

public class Solution {
    private class ResType {
        int sum;
        int size;
        public ResType(int sum, int size) {
            this.sum = sum;
            this.size = size;
        }
    }
    /**
     * @param root: the root of binary tree
     * @return: the root of the maximum average of subtree
     */
    TreeNode maxNode = null;
    ResType globalNode = null;
    public TreeNode findSubtree2(TreeNode root) {
        // write your code here
        helper(root);
        return maxNode;
    }
    
    private ResType helper(TreeNode root) {
        if (root == null) {
            return new ResType(0, 0);
        }
        ResType left = helper(root.left);
        ResType right = helper(root.right);
        int curSum = left.sum + right.sum + root.val;
        int curSize = left.size + right.size + 1;
        ResType cur = new ResType(curSum, curSize);
        if (maxNode == null || curSum * globalNode.size > curSize * globalNode.sum) {
            globalNode = cur;
            maxNode = root;
        }
        return cur;
    }
}

 

以上是关于[LintCode] 597. Subtree with Maximum Average的主要内容,如果未能解决你的问题,请参考以下文章

LintCode Subtree

lintcode-easy-Subtree

lintcode596- Minimum Subtree- easy

git subtree 使用

LintCode 125 · 背包问题---01背包问题

245 子树