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

二叉树的最大路径和

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

*选择后序是因为选择方向确定,如果是前序的话,root左右两个节点不好选择,而后序能避免此问题; *
从叶子节点开始选择,两个子节点的值中选择最大值,如果比0小,放弃此路径,否则,每次都取一棵小子树的最大值,即(左中右)

    int ans=-INT32_MAX;
    int dfs(TreeNode*root){
        if(!root){
            return 0;
        }
        int left=max(dfs(root->left),0);
        int right=max(dfs(root->right),0);
        ans=max(ans,root->val+left+right);
        return root->val+max(left,right);
    }
    int maxPathSum(TreeNode* root) {
        // write code here
        if(root==nullptr)return 0;
        dfs(root);
        return ans;
    }
全部评论

相关推荐

11-21 14:37
江苏大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
karis_aqa:和hr没关系,都是打工的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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