LeetCode 124. 二叉树中的最大路径和

原题目:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/

思路:

可以看出这是dfs类型的题目,我们分析可以知道,在每一个节点对应的路径最大值应该是:

max(递归左子树得到的le,0)  + 当前节点的值 + max(递归右子树得到的ri,0)

在使用全局变量maxn记录整个树的最大路径和。

 

问题:根据上面可以递归的函数应该是由返回值的,那么应该返回什么呢。

分析:递归的状态是返回到其父节点,其父节点只能向下遍历一条路径,所以

不难得出,应该返回: 当前节点的值   + max(其左子树与其右子树最大值)。

 

代码:

class Solution {
private:
    int maxn = INT_MIN;
    int treesum(TreeNode* root){
        if(root==NULL) return 0;
        int left = max(treesum(root->left),0);
        int right = max(treesum(root->right),0);
        maxn = max(maxn,left+right+root->val);
        //返回到父节点,此时应该是当前节点的值加上其左右子树的最大值。
        return root->val + max(left,right);
    }

public:
    int maxPathSum(TreeNode* root) {
        treesum(root);
        return maxn;
    }
};

 

你可能感兴趣的:(LeetCode,DFS)