Subtree with Maximum Average

 /*class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
	private class ResultType {
		private int sum;
		private int size;
		public ResultType(int sum,int size) {
			this.sum = sum;
			this.size = size;
		}
	}
	TreeNode subtree = null;
	ResultType subtreeResult = null;
	public TreeNode findMaxiAverage(TreeNode root) {
	  helper(root);
	  return subtree;
	}
	private ResultType helper(TreeNode root) {
	  if (root == null) {
		return new ResultType(0,0);
		}
	  ResultType left = helper(root.left);
	  ResultType right = helper(root.right);
	  ResultType result = new ResultType(left.sum + right.sum + root.val 
                                               left.size + right.size +1)
		if (subtree == null || result.sum * subtreeResult.size > result.size *subtreeResult.sum) {
    		        subtreeResult = result;
                        subtree = root;
                   }
               return result;    
	}
}            

  

posted @ 2017-03-31 10:55  东塾堂1892  阅读(237)  评论(0)    收藏  举报