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

二叉树中的最大路径和

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

题意

对于给定的二叉树,计算经过节点值总和最大的路径的节点值总和。

思路

我们可以发现,对于某棵二叉树,其所有路径只有三种可能:

  1. 路径全部位于左节点一侧
  2. 路径全部位于右节点一侧
  3. 路径包含根节点

因此,对于一颗给定的二叉树,我们可以将其递归处理,分别求出其左右子树节点值总和最大路径的和,最后就可以求出该二叉树的最大路径和,可以使用深度优先搜索的思想来构造计算函数。

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int k=-1919810;//将k初始化为一个足够小的值
    int dfs(TreeNode* P)
    {
        if(P == NULL) return -114514;//若P为空则返回一个负值表示
        int lMax,rMax;
        lMax=max(dfs(P->left),0);
        rMax=max(dfs(P->right),0);
        //分别对左右子树进行递归搜索
        k=max(k,P->val+lMax+rMax);
        return P->val+max(lMax,rMax);
    }
    int maxPathSum(TreeNode* root) 
    {
        // write code here
        dfs(root);
        return k;
    }
};

复杂度分析

时间复杂度:O(n)O(n),nn是二叉树的节点个数,每个节点都至少遍历到了一次。

空间复杂度:O(n)O(n),为深度优先搜索所用栈空间。

全部评论

相关推荐

10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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