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为全局变量,或者引用变量,随时更新;通过递归来查找最大值;另外为了求解包含根节点的最大值,函数需要返回包含根节点最大值,可递归求解; 

可以不考虑溢出,直接算出;

  1. int localSum(TreeNode * root, int &maxval) {
  2. if(root==NULL) return 0;
  3. int lsum=localSum(root->left,maxval);
  4. int rsum=localSum(root->right,maxval);
  5. int csum=max(root->val,max(lsum+root->val,rsum+root->val));
  6. maxval = max(maxval,max(csum,lsum+root->val+rsum)); // 有几点需要注意, 可能发生溢出;  加法超过最大值或者最小值导致溢出,变成最大值;
  7. return csum;
  8. }
  9. int maxPathSum(TreeNode *root) {
  10. if(root==NULL) return 0;
  11. int maxval=INT_MIN;
  12. localSum(root,maxval);
  13. return maxval;
  14. }
posted @ 2014-09-28 11:09  purejade  阅读(104)  评论(0)    收藏  举报