最小子树——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;
}
}