124. 二叉树中的最大路径和

题目:

124. 二叉树中的最大路径和
[编程题]二叉树的最大路径和
在这里插入图片描述

题解:

在这里插入图片描述
在这里插入图片描述

代码:

public class code124 {

    int maxValue;

    public int maxPathSum(TreeNode root) {
        maxValue = Integer.MIN_VALUE;
        maxPathDown(root);
        return maxValue;
    }

    /**
     * 返回经过 node 的单边分支最大和,即 Math.max(node, node + left, node + right)
     * @param node
     * @return
     */
    private int maxPathDown(TreeNode node)
    {
        if(node == null)
        {
            return 0;
        }
        // 递归计算左右子节点的最大贡献值
        // 只有在最大贡献值大于 0 时,才会选取对应子节点

        // 计算左边分支最大值,左边分支如果为负数还不如不选择
        int left = Math.max(0, maxPathDown(node.left));
        // 计算右边分支最大值,右边分支如果为负数还不如不选择
        int right = Math.max(0, maxPathDown(node.right));

        // 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
        // 更新答案

        // left->node->right 作为路径与已经计算过历史最大值做比较
        maxValue = Math.max(maxValue, left + right + node.val);

        // 返回节点的最大贡献值,交给上层进行计算
        // 返回经过 node 的单边最大分支给当前 node 的父节点计算使用
        return Math.max(left, right) + node.val;
    }

    public static void main(String[] args) {
        Integer nums[] = {-10, 9, 20, null, null, 15, 7};
        TreeNode root = TreeNodeUtil.arrayToTreeNode(nums);
        TreeOperation.show(root);

        System.out.println("***************************************");

        code124 test = new code124();
        int res = test.maxPathSum(root);
        System.out.println(res);
    }

}

参考:

  1. 二叉树中的最大路径和
  2. 【二叉树中的最大路径和】递归,条理清晰
  3. 「手画图解」二叉树中的最大路径和(涵盖细节注意点)
  4. 【二叉树的最大路径和】主要理解题目意思,详细图解
  5. 124.递归的精髓,记录一下
  6. java递归的解决思路
  7. 理解路径概念+简单思路解题(附图)
  8. 详细通俗的思路分析,多解法
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页