- 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;
};
本文介绍了一种寻找二叉树中拥有最大和的子树的方法,并提供了详细的算法实现。通过递归计算每个节点的子树和,比较并更新全局最大子树节点,最终返回最大子树的根节点。
1667

被折叠的 条评论
为什么被折叠?



