LintCode 628: Maxmum Subtree

  1. Maximum Subtree
    Given a binary tree, find the subtree with maximum sum. Return the root of the subtree.

Example
Given a binary tree:

 1

/
-5 2
/ \ /
0 3 -4 -5
return the node with value 3.

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

解法:

  1. 用2个全局变量来记录最大子数值和最大子数节点
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: the root of binary tree
     * @return: the maximum weight node
     */
    TreeNode * findSubtree(TreeNode * root) {
        if (!root) return NULL;
        
        helper(root);
        return g_maxSubTreeNode;
    }
    
    int helper(TreeNode *root) {
        if (!root) return 0;

        int sumLeft = helper(root->left);
        int sumRight = helper(root->right);
        int sumTotal = sumLeft + sumRight + root->val;
        
        if (sumLeft >= g_maxSubTree) {
            g_maxSubTreeNode = root->left;
            g_maxSubTree = sumLeft;
        } 
        
        if (sumRight >= g_maxSubTree) {
            g_maxSubTreeNode = root->right;
            g_maxSubTree = sumRight;
        } 
        
        if (sumTotal >= g_maxSubTree) {
            g_maxSubTreeNode = root;
            g_maxSubTree = sumTotal;
        }
        
        return sumTotal;
    }
    
private:
    TreeNode * g_maxSubTreeNode;
    int g_maxSubTree = INT_MIN;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值