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 -2return 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?