/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//时间O(n)(n为节点个数), 空间复杂度O(n)(n递归栈深度)
class Solution {
private:
int ans = INT_MIN;
public:
int maxPathSum(TreeNode* root) {
helper(root);
return ans;
}
int helper(TreeNode* root) { //返回root子树所能贡献的最大路径和
if(!root) return 0;
// 递归计算左右子节点的最大贡献值
// 只有在最大贡献值大于 0 时,才会选取对应子节点
int left = max(helper(root->left), 0);
int right = max(helper(root->right), 0);
// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
int rootPrice = root->val + left + right;
// 更新答案
ans = max(ans, rootPrice);
// 返回节点的最大贡献值
return root->val + max(left, right);
}
};
LeetCode124. 二叉树中的最大路径和
最新推荐文章于 2021-01-03 18:24:39 发布