在DFS的过程中,计算路径和
对任一节点,可能是最大路径树的根节点,起始节点,中间节点
class Solution {
public:
int maxSum;
int maxPathSum(TreeNode* root) {
//将maxSum初始化为root->val或者最小负数
maxSum = root->val;
dfs(root);
return maxSum;
}
int dfs(TreeNode* node) {
if (node == NULL) return 0;
int lsum = dfs(node->left);
int rsum = dfs(node->right);
//对已遍历的树进行判断
//若以当前节点为根节点
int tmpPath = node->val + lsum + rsum;
//若以当前节点为中间节点
int tmpSum1 = node->val + max(lsum,rsum);
//若以当前节点为起始节点
int tmpSum2 = node->val;
int tmpSum = max(tmpSum1, tmpSum2);
maxSum = max(maxSum, tmpSum);
maxSum = max(maxSum, tmpPath);
//继续遍历
return tmpSum;
}
int max(int a, int b) {
if (a > b) return a;
return b;
}
};