- 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.
解法:
- 用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;
};