问题描述
https://www.lintcode.com/problem/minimum-subtree/description
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;
* }
* }
*/
public class Solution {
/**
* @param root: the root of binary tree
* @return: the root of the minimum subtree
*/
/*
分治+全局变量监控的遍历
用分治每次的确计算出当前的sum并作为上层需要的数据返回。
但每次helper里同时暗搓搓比一下自己是不是比全局变量优秀了,取而代之。
*/
private TreeNode subtree=null;
private int subtreeSum=Integer.MAX_VALUE;
public TreeNode findSubtree(TreeNode root) {
helper(root);
return subtree;
}
//定义 :返回以root为根的和
private int helper(TreeNode root){
if(root==null)
return 0;
//分治
int sum=helper(root.left)+helper(root.right)+root.val;
//遍历
if(sum<subtreeSum){
subtreeSum=sum;
subtree=root;
}
return sum;
}
}