【leetcode】124.(Hard)Binary Tree Maximum Path Sum

本文介绍了一种解决树结构中寻找最大路径和的算法,通过递归回溯的方法,实时更新最大路径值,最终返回包含当前节点的最大路径和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:
回溯
对于树的一个结点来说,[左子树值]、[右子树值]、[左子树+右子树+当前结点值],这三种组合中,必然有一个最大值,将这个最大值保存在maxValue[0]中,实时更新即可。
函数maxValue返回的是如果一定要包含当前结点值时的最大数值。


提交代码:

class Solution {
    public int maxPathSum(TreeNode root) {
    	int[] maxValue=new int[1];
    	maxValue[0]=Integer.MIN_VALUE;
    	
    	findMax(maxValue,root);
    	return maxValue[0];
    }
    
    public int findMax(int[] maxValue,TreeNode root) {
    	if(root==null)	return Integer.MIN_VALUE;    	
    	if(root.left==null&&root.right==null) {
    		if(root.val>maxValue[0])	maxValue[0]=root.val;
    		return root.val;
    	}
    	
    	int left=findMax(maxValue,root.left);
    	int right=findMax(maxValue,root.right);
    	
    	int value=root.val;
    	if(left>0)	value+=left;
    	if(right>0)	value+=right;
    	if(value>maxValue[0])	maxValue[0]=value;
    	
    	value=root.val;
    	if(left>right&&left>0)		value+=left;
    	else if(right>=left&& right>0)	value+=right;
    	
    	return value;
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值