原题地址:https://discuss.leetcode.com/category/132/binary-tree-maximum-path-sum
这道题求解一个二叉树的最短路径,该路径可以从任何一个节点开始,从任何一个节点结束,只要其和是最小的,参考LeetCode大神的答案,如下:
class Solution {
int sum;
public:
int maxPathSum(TreeNode* root) {
sum=INT_MIN;//考虑到负数的情况,从最小的整数开始比较
help(root);//从根节点开始递归
return sum;//返回路径的最大值
}
/*** return the max-value-ended-at-root-node ***/
int help(TreeNode* root){
if(!root) return 0;//递归到叶节点的子节点,返回0
int left = max(0, help(root->left));//对根节点的左叶节点开始递归
int right = max(0, help(root->right));//对根节点的右叶节点开始递归
//key parts : embedding the max-value-find in the recursion process
sum = max(sum, left+right+root->val);//更新现有路径最大值
/*** get the max-value-ended-at-root ***/
return max(left, right)+root->val;
}
};