475.二叉树的最大路径和 II

描述

给一棵二叉树,找出从根节点出发的路径中,和最大的一条
这条路径可以在任何二叉树中的节点结束,但是必须包含至少一个点(也就是根了)

样例

给出如下的二叉树:

      1
     / \
    2   3

返回4。(最大的路径为1→3)

代码

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root the root of binary tree.
     * @return an integer
     */
    public int maxPathSum2(TreeNode root) {
        if (root == null) {
            // 不能return 0;因为整棵树的结点值可能都为负
            return Integer.MIN_VALUE;
        }
        
        int left = maxPathSum2(root.left);
        int right = maxPathSum2(root.right);
        // Math.max(left, right)必须和0比较
        // 因为叶子结点的左右儿子为空
        // Math.max(left,right)必定会返回Integer.MIN_VALUE
        // 遇到叶子结点的左右儿子函数值应该返回0
        return root.val + Math.max(0, Math.max(left, right));
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,489评论 1 31
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,345评论 0 25
  • 面试题7:重建二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果。请重建该二叉树。假设输入的前序遍历和中序遍历...
    lyoungzzz阅读 575评论 0 0
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,782评论 5 14
  • 那一日,上午的校园,格外地炎热,是那种湿热的桑拿天。树上有知了在叫,气温似乎一年热过一年,若是晨间与日落还能静好地...
    菲乐阅读 586评论 1 3