题目如下
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入:[1,2,3]
1
/ \
2 3
输出:6
示例 2:
输入:[-10,9,20,null,null,15,7]
-10
/
9 20
/
15 7
输出:42
解题代码
递归求解左右子树中的最大路径和即可
class Solution
{
public:
int maxPath(TreeNode *node)
{
if (node == nullptr)
{
return 0;
}
int left = max(0, maxPath(node->left));
int right = max(0, maxPath(node->right));
maxVal = max(maxVal, node->val + left + right);
return max(0, max(left, right) + node->val);
}
int maxPathSum(TreeNode *root)
{
if (root == nullptr)
{
return 0;
}
maxVal = INT_MIN;
maxPath(root);
return maxVal;
}
int maxVal;
};