最小子树——lintcode596

最小子树

题目:最小子树

给一棵二叉树, 找到和为最小的子树, 返回其根节点。

示例:

输入:
{1,-5,2,1,2,-4,-5}
输出:1
说明
这棵树如下所示:
     1
   /   \
 -5     2
 / \   /  \
1   2 -4  -5 
整颗树的和是最小的,所以返回根节点1.

题解:分治法

public class Solution {
    private TreeNode minRoot;
    private int minSum;

    public int dfs(TreeNode root) {
        if (root == null) return 0;
        int sum = dfs(root.left)+ dfs(root.right) + root.val;
        if (sum < minSum) {
            minSum = sum;
            minRoot = root;
        }
        return sum;
    }

    public TreeNode findSubtree(TreeNode root) {
        minRoot = root;
        minSum=Integer.MIN_VALUE;
        dfs(root);
        return minRoot;
    }
}
posted @ 2022-01-02 18:43  言思宁  阅读(136)  评论(0编辑  收藏  举报