lintcode596- Minimum Subtree- easy

Given a binary tree, find the subtree with minimum sum. Return the root of the subtree.

Notice

LintCode will print the subtree which root is your return node.
It's guaranteed that there is only one subtree with minimum sum and the given binary tree is not an empty tree.

Example

Given a binary tree:

     1
   /   \
 -5     2
 / \   /  \
0   2 -4  -5 

return the node 1.

 


 

分治+全局变量监控的遍历。

用分治每次的确计算出当前的sum并作为上层需要的数据返回。但每次helper里同时暗搓搓比一下自己是不是比全局变量优秀了,取而代之。

/**
 * 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
     */
     
    private int minSum = Integer.MAX_VALUE;
    private TreeNode minRoot = null;
    
    public TreeNode findSubtree(TreeNode root) {
        // write your code here
        
        if (root == null) {
            return minRoot;
        }
        
        subtreeSum(root);
        return minRoot;
        
    }
    
    private int subtreeSum(TreeNode root) {
        
        if (root == null) {
            return 0;
        }
        
        int leftSum = subtreeSum(root.left);
        int rightSum = subtreeSum(root.right);
        
        int result = leftSum + rightSum + root.val;
        
        if(result < minSum) {
            minSum = result;
            minRoot = root;
        }
        
        return result;
    }
}

 

转载于:https://www.cnblogs.com/jasminemzy/p/7637070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值