1120.Subtree with Maximum Average

Lintcode 597

1.Description(Easy)

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

Example

Given a binary tree:

     1
   /   \
 -5     11
 / \   /  \
1   2 4    -2

return the node11.

2.Code

加一个HelperType记录当前的sum和size

两个类变量 currentData记录最大的average 和 currentNode记录最大值的节点。

divided conquer

每次比较当前平均值和currentData中的平均值的大小,大的话就覆盖

private class HelperType{
        public int sum;
        public int size;
        public HelperType(int sum,int size){
            this.size=size;
            this.sum=sum;
        }
    }

    public TreeNode currentNode=null;
    public HelperType currentData=null;

    public HelperType helper(TreeNode root){
        if(root==null){
            return new HelperType(0,0);
        }
        HelperType left=helper(root.left);
        HelperType right=helper(root.right);
        HelperType result=new HelperType(root.val+left.sum+right.sum,1+left.size+right.size);
        if(currentNode==null){
            currentNode=root;
            currentData=result;
        }
        if(currentData.size*result.sum>currentData.sum*result.size){
              currentData=result;
              currentNode=root;
        }
        return result;
    }
    public TreeNode findSubtree2(TreeNode root){
        helper(root);
        return currentNode;
    }

Last updated

Was this helpful?