分析
这道题是一个hard的题目,本人使用的递归的方法做的。先计算左子树中加上左子树根节点的最大路径和,在计算右子树中加上右子树根节点的最大路径和。然后就可以获得加上当前节点的最大路径和。用一个变量统计整个树中最大路径和。注意,这个最大路径和可能不经过root结点。
代码
class Solution {
public:
int maxPathSum(TreeNode* root) {
int ans = INT_MIN;
oneSideMax(root, ans);
return ans;
}
int oneSideMax(TreeNode* root,int& ans){
if(nullptr == root) return 0;
int left = max(0, oneSideMax(root -> left, ans));
int right = max(0, oneSideMax(root -> right, ans));
ans = max(ans, left + right + root -> val);
return max(left, right) + root -> val;
}
};