Subtree with Maximum Average

来源:互联网 发布:兄弟连java 编辑:程序博客网 时间:2024/05/16 23:56

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

python:一定要注意,除法的精度问题。leetcode中不一定使用的是python3.X

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        this.val = val        this.left, this.right = None, None"""class Solution:    # @param {TreeNode} root the root of binary tree    # @return {TreeNode} the root of the maximum average of subtree    avg, node = 0, None    def findSubtree2(self, root):        # Write your code here        if root is None:            return None        self.getSubtree(root)        return self.node;            def getSubtree(self, root):        if root is None:            return 0, 0                    sumLeft, countLeft = self.getSubtree(root.left)        sumRight, countRight = self.getSubtree(root.right)                sumRoot = sumLeft + sumRight + root.val        countRoot = countLeft + countRight + 1        average = sumRoot * 1.0 / countRoot         if self.node is None or average > self.avg:            self.avg = average            self.node = root        return sumRoot, countRoot        


Java

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */class ResultType {    public int sum;    public int count;    public double avg;    public TreeNode node;    public ResultType(int sum, int count, double avg, TreeNode node) {        this.sum = sum;        this.count = count;        this.node = node;        this.avg = avg;    }}public class Solution {    /**     * @param root the root of binary tree     * @return the root of the maximum average of subtree     */    private double avger = Integer.MIN_VALUE;    private TreeNode node = null;    public TreeNode findSubtree2(TreeNode root) {        // Write your code here        if (root == null) {            return null;        }        getSubtree(root);        return node;    }    private ResultType getSubtree(TreeNode root) {        if (root == null) {            return new ResultType(0, 0, 0, null);        }        ResultType left = getSubtree(root.left);        ResultType right = getSubtree(root.right);        int sum = root.val + left.sum + right.sum;        int num = 1 + left.count + right.count;        if (avger < (double)sum / num) {            avger = (double)sum / num;            node = root;        }        return new ResultType(sum, num, (double)sum / num, root);    }}



原创粉丝点击