124. 二叉树中的最大路径和-字节跳动高频题

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了124. 二叉树中的最大路径和-字节跳动高频题相关的知识,希望对你有一定的参考价值。

一、题目描述

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和 。

示例 1:

输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6
示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

二、解题

递归

从根节点开始递归,然后分别查找左右子树的最大路径和,这时候分为两种根节点+单边或者根节点+双边,返回最大值即可。


class Solution 
    int max = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) 
        if(root == null)
            return 0;
        
        maxsum(root);
        return max;

    
    public int maxsum(TreeNode root)
        if(root == null)
            return 0;
        
        //左右子树的路径和为0的话舍弃
        int leftmax = Math.max(maxsum(root.left),0);
        int rightmax = Math.max(maxsum(root.right),0);
        //全局最大值是左右+根节点还是根节点+单边
        int nodemax = root.val + leftmax + rightmax;
        int nodeodd = root.val + Math.max(leftmax,rightmax);
        //更新最大值
        max = Math.max(max,Math.max(nodemax,nodeodd));
        //每一层返回的是单边的
        return Math.max(leftmax,rightmax)+root.val;
    

创作挑战赛 新人创作奖励来咯,坚持创作打卡瓜分现金大奖

以上是关于124. 二叉树中的最大路径和-字节跳动高频题的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

leetcode困难124二叉树中的最大路径和

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

LeetCode第124题—二叉树中的最大路径和—Python实现