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. 二叉树中的最大路径和-字节跳动高频题的主要内容,如果未能解决你的问题,请参考以下文章