给一个二叉树,要找和尽量小的subtree。
private TreeNode subTree = null; //用于记载最小的subtree的根结点
private int subTreeSum = Integer.MAX_VALUE;
public TreeNode findSubTree (TreeNode root){
subTreeSum = helper(root);
return subTree;
}
private int helper (TreeNode node){ //divide and conquer,有return value。
if (node == null){ // 递归终止条件
return 0;
}
int sum = helper(node.left) + helper (node.right) + node.val; //左右分开
if (sum < subTreeSum){
subTreeSum = sum;
subTree = node;
}
return sum;
}