124. 二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径> 至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3] 1 / \ 2 3 输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
Solution() : maxSum(INT_MIN) {}
int help(TreeNode* root) {
if (!root) return 0;
int left = help(root->left);
int right = help(root->right);
maxSum = max(maxSum, left + right + root->val);
return max(max(left + root->val, right + root->val), 0);
}
int maxPathSum(TreeNode* root) {
help(root);
return maxSum;
}
private:
int maxSum;
};
思路: help(root)返回经过root节点的路径(左中、中右)和的最大值,如果其路径和小于0,选择不经过它(返回0)。maxSum记录所有结点左中右路径的最大和。
2020/07/01 18:43