Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40232
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-11-27 10:57:25

递归。每到一个节点计算其左右子树的最大路径和。
如果左或者右子树的最大路径和比已经找到的最大路径和大则更新。
如果以这个节点为根节点能得到的最大路径和比已经找到的最大路径和大则更新。
每次递归返回此节点值与左右子树最大路径和中较大者的和。



点击(此处)折叠或打开

  1. /**
  2.  * Definition for binary tree
  3.  * struct TreeNode {
  4.  * int val;
  5.  * TreeNode *left;
  6.  * TreeNode *right;
  7.  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     int maxSum(TreeNode *root) {
  13.         int left=0,right=0;
  14.         if(root->left)
  15.         {
  16.             left=maxSum(root->left);
  17.             if(left>re) re=left;
  18.         }
  19.         if(root->right)
  20.         {
  21.             right=maxSum(root->right);
  22.             if(right>re) re=right;
  23.         }
  24.         int sum=root->val+(left>0?left:0)+(right>0?right:0);
  25.         if(sum>re) re=sum;
  26.         int child=(left>right)?left:right;
  27.         return root->val+(child>0?child:0);
  28.     }
  29.     int maxPathSum(TreeNode *root) {
  30.         if(NULL==root) return 0;
  31.         re=0x80000000;
  32.         maxSum(root);
  33.         return re;
  34.     }
  35. private:
  36.     int re;
  37. };

阅读(161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~