1 题目描述
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
2 解题思路
代码。
3 代码实现
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int maxPathSumVal;
int maxPathSum(TreeNode* root) {
// write code here
maxPathSumVal = INT_MIN;
maxPathSumHelper(root);
return maxPathSumVal;
}
int maxPathSumHelper(TreeNode *root){
if(root == NULL) return 0;
int leftMaxPathSum = max(0, maxPathSumHelper(root->left));
int rightMaxPathSum = max(0, maxPathSumHelper(root->right));
maxPathSumVal = max(maxPathSumVal, leftMaxPathSum + rightMaxPathSum + root->val);
return max(leftMaxPathSum, rightMaxPathSum) + root->val;
}
};
4 运行结果
运行时间:6ms
占用内存:972k