题解 | #二叉树的最大路径和#

二叉树的最大路径和

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

代码不是我想的,这里只是做出解释

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int maxSum = INT_MIN;
    int sumPath(TreeNode*root){
        if(!root) return 0;
        auto l = max(0, sumPath(root->left));
        auto r = max(0, sumPath(root->right));
        maxSum = max(maxSum, l + r + root->val);
        return max(l, r) + root->val;
    }
    int maxPathSum(TreeNode* root) {
        // write code here
        sumPath(root);
        return maxSum;
    }
};

这个算法的想法也很简单:

  • 计算左子树的最大路径和
  • 计算右子树的最大路径和
  • 更新树的最大路径和
  • 返回此树的最大路径和

巧妙之处在于使用 0 过滤掉了结果为负数的最大路径和

另外将 maxSum 的更新是每次迭代都会进行了,也就是说在每棵子树上都会进行,这样如果出现子树比较大而根节点为负值的情况时,就不会更新 maxSum

说是最大路径和,不如叫做节点的最大和(至少一个节点)

全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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