LeetCode124.二叉树中最大路径和

 第一次只花了20分钟左右就完全靠自己把一道hard题做出来了。我这个方法还是非常简单非常容易理解的,虽然时间复杂度达到了O(n2)。以下是我的代码:

class Solution {
    int max;
    public int maxPathSum(TreeNode root) {
        max = Integer.MIN_VALUE;
        return dfs2(root);
    }
    public int dfs2(TreeNode root){
        if(root == null)return Integer.MIN_VALUE;
        max = Math.max(dfs(root), dfs(root.left)+dfs(root.right)+root.val);
        return Math.max(max, Math.max(dfs2(root.left), dfs2(root.right)));
    }
    public int dfs(TreeNode root){
        if(root == null){
            return 0;
        }
        return root.val + Math.max(0,Math.max(dfs(root.left), dfs(root.right)));
    }
}

 我用了两个深度优先遍历,首先第一个dfs(TreeNode root)方法是找出以root的为根节点的单向最大和的路径。

 这个非常好求,root为根的单向最大和路径就是(左子树为根的单向最大路径和右子树为根的单向最大路径中的最大的+root.val),当然如果两个子节点的最大和路径都是负数,那么root它自己单独就是最大的。

第二个深度优先遍历dfs2(TreeNode root)方法是遍历整颗树的节点,找出分别以每个节点的最大和路径不只是单向的,还可以通过根节点把左右两边连起来)的最大值,返回最大值即可。

这个也非常好求,要么是以root为根的单向的最大值dfs(root),要么是把根节点和左边最大的和右边最大的连起来dfs(root.left)+dfs(root.right)+root.val。为什么不考虑只连左边或者只连右边呢?因为第一种情况dfs(root)就是考虑了只连左或者只连右后者单独一个节点。然后进行递归找出最大值即可return Math.max(max, Math.max(dfs2(root.left), dfs2(root.right)))

看看官方题解做法吧

 看完题解我觉得我像个傻逼,一次深度遍历dfs就好了,只需要设置一个全局变量max,然后每遍历到一个节点就更新一下max就好了,所以把我的代码稍微改一下就是题解代码:

class Solution {
    int max;
    public int maxPathSum(TreeNode root) {
        max = Integer.MIN_VALUE;
        dfs(root);
        return max;
    }
    public int dfs(TreeNode root){
        if(root == null){
            return 0;
        }
        int lefeCon = Math.max(0,dfs(root.left));
        int rightCon = Math.max(0, dfs(root.right));
        max = Math.max(max, root.val+lefeCon+rightCon);
        
        return root.val + Math.max(0,Math.max(lefeCon, rightCon));
    }
}

 我这个dfs(TreeNode root)还是返回根节点连上左边或者连上右边的最大值(不是同时连左边和右边),然后用max是左右都连起来,max不停更新,最后返回max即可。

相关推荐

  1. 力扣124. 路径

    2023-12-09 03:02:03       33 阅读
  2. 简洁易懂递归 | 力扣124.路径

    2023-12-09 03:02:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 03:02:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 03:02:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 03:02:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 03:02:03       20 阅读

热门阅读

  1. CSS结构伪类选择器之否定伪类:not()

    2023-12-09 03:02:03       43 阅读
  2. BLUE引擎开始游戏没反应如何解决

    2023-12-09 03:02:03       41 阅读
  3. oracle 19c创建db_link名称带.com域名问题处理

    2023-12-09 03:02:03       41 阅读
  4. C++ Primer Plus第十四章笔记

    2023-12-09 03:02:03       32 阅读
  5. Win32编辑框消息学习

    2023-12-09 03:02:03       33 阅读
  6. postgresql-effective_cache_size参数详解

    2023-12-09 03:02:03       32 阅读
  7. leetcode - 2264. Largest 3-Same-Digit Number in String

    2023-12-09 03:02:03       34 阅读