124. 二叉树中的最大路径和
题目:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
class Solution {
public:
int maxPathSum(TreeNode* root) {
int ans = INT_MIN;
maxPath(root, ans);
return ans;
}
int maxPath(TreeNode* node, int& ans)
{
if(node == nullptr) return 0;
int left = maxPath(node->left, ans);
int right = maxPath(node->right, ans);
//经过根节点的情况下,最大路径和
int lm = node->val + max(left, 0) + max(right, 0);
//不经过根节点情况下,最大路径和为当前节点,加上左右子树中的最大值
int rt = node->val + max(0, max(right, left));
ans = max(ans, max(lm, rt));
return rt;
}
};