二叉树最大路径和

二叉树的最大路径和

http://www.nowcoder.com/questionTerminal/da785ea0f64b442488c125b441a4ba4a

多么痛的领悟

返回条件写错,调了半小时;初始值写错,调了半小时;递归函数名写错,调了半小时。。。🥱

class Solution {
public:
    /**
     *
     * @param root TreeNode类
     * @return int整型
     */
    int maxPathSum(TreeNode *root) {
        // write code here
        // 后序遍历,记录左右子树最大的路径节点和
        //    因为需要分别记录左子树和右子树的最大路径和,用循环实现起来比较麻烦
        postOrder(root);
        return maxSum;
    }
    int postOrder(TreeNode *root) {
        if (!root) return 0;
        int left = postOrder(root->left);
        int right = postOrder(root->right);
        int current = root->val;
        if (left > 0) current += left;
        if (right > 0) current += right;
        maxSum = max(maxSum, current);
        // 注意:此处返回的是max(左+中,右+中, 中),左+右+中不满足题意
        return max(root->val, max(left, right) + root->val);
    }
private:
    int maxSum = INT_MIN;
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论
请问:为什么left>0,current+=left后,如果right>0,current还要+=right,这样不是左右子树都加了吗?
点赞 回复 分享
发布于 2020-09-02 22:14

相关推荐

评论
14
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务