参考链接
- https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
题目描述
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
思路分析
针对某个节点而言,经过它的最大路径和就是它左子树的最大路径和加上右子树的最大路径和以及节点本身的值。所以按照后序遍历来写。
由题意知,路径不一定经过根节点,所以我们直接求每个节点的最大路径和,找到最大值就行了。
代码
class Solution {
public:
int ans = 0;
int OneSideMax(TreeNode* root)
{
if(root == nullptr) return 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;
}
int maxPathSum(TreeNode* root) {
OneSideMax(root);
return ans;
}
};