Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6.
解析: 最大路径和来自三个方面,一个是存在左子树中,一个存在右子树中,还有一个包含根节点(分为三类,包含根节点的左子树,包含根节点带右子数,包含根节点的左右子数)
maxval为全局变量,或者引用变量,随时更新;通过递归来查找最大值;另外为了求解包含根节点的最大值,函数需要返回包含根节点最大值,可递归求解;
可以不考虑溢出,直接算出;
- int localSum(TreeNode * root, int &maxval) {
- if(root==NULL) return 0;
- int lsum=localSum(root->left,maxval);
- int rsum=localSum(root->right,maxval);
- int csum=max(root->val,max(lsum+root->val,rsum+root->val));
- maxval = max(maxval,max(csum,lsum+root->val+rsum)); // 有几点需要注意, 可能发生溢出; 加法超过最大值或者最小值导致溢出,变成最大值;
- return csum;
- }
- int maxPathSum(TreeNode *root) {
- if(root==NULL) return 0;
- int maxval=INT_MIN;
- localSum(root,maxval);
- return maxval;
- }

浙公网安备 33010602011771号