[每日一题2020.06.21]leetcode #124 DFS二叉树

题目

1592722350144

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;
    }
};
posted @ 2020-06-21 14:59  roccoshi  阅读(86)  评论(0编辑  收藏  举报