题目描述:
示例:
分析题意:
1,该路径至少包含一个节点,不一定要经过根节点,可以只是一个结点;
2,从任意节点出发,到达任意节点
3,求:所有可能路径的最大值
测试用例:
代码和思路分析:
后序遍历;加到负值宁愿不加;
class Solution {
int ans = INT_MIN;
public :int maxPathSum(TreeNode* root) {
oneSideMax(root);
return ans;
}
int oneSideMax(TreeNode* root) { //后序遍历
if (root == nullptr) return 0; //特殊情况
//看左边 和 右边; 如果是负数 甘愿不加 所以是加 0 ;
int left = max(0, oneSideMax(root->left));
int right = max(0, oneSideMax(root->right));
ans = max(ans, left + right + root->val); //记录但当前最大值 并更新
return max(left, right) + root->val;
}
};
运行结果:
总结:
最根本的。就是一个后序遍历!