dfs求每一个节点向左走最大路径 + 节点值 + 向右走最大路径
搜索完后的最大值就是答案
dfs的出口和规则自己想有时候老想不通, 一看答案又一下子明白, 还是题目刷少了没经验
class Solution {
public:
int maxSum = 0xc0c0c0c0; // 全局变量, 记录ans
int dfs(TreeNode* root) {
if (root == NULL) return 0;
int left = max (0, dfs(root->left)); // 记录向左走可以达到的最大值
int right = max (0, dfs(root->right)); // 记录向右走可以达到的最大值
int nowSum = left + right + root->val; // 对于每一个节点, 其最大值 = 向左走最大值 + 节点值 + 向右走最大值
maxSum = max(maxSum, nowSum); // 最大值更新
return root->val + max(left, right); // 返回到上一层
}
int maxPathSum(TreeNode* root) {
dfs(root);
return maxSum;
}
};