力扣hot100 二叉树中的最大路径和 递归

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

文章目录

解题方法

👨‍🏫 参考思路

复杂度

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

💖 Code

Java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
	int ans = -20000;//此处的最小值一定要小于数据范围的最小值 -10000

	public int maxPathSum(TreeNode root)
	{
		cal(root);
		return ans;
	}

	/**
	 * @param root 当前树的节点
	 * @return 当前树的单侧最大路径长度
	 */
	private int cal(TreeNode root)
	{
		if (root == null)// 访问到叶子节点,返回 0
			return 0;
		int l = cal(root.left);// 递归计算左右子树
		int r = cal(root.right);
		int max = l > r ? l : r;// 记录左臂右膀的长度
		int t = root.val;// t 记录的是以当前 root 为转折点的路径长度
		if (l > 0)// 负数则舍弃
			t += l;
		if (r > 0)
			t += r;

		int res = root.val;// res = 左右子树单侧路径较长者 + 当前root的值
		if (max > 0)// 同理,不要负值拖油瓶
			res += max;
		ans = Math.max(ans, t);// 更新全局答案
		return res;
	}
}
相关推荐
knight_9___12 分钟前
LLM工具调用面试篇6
人工智能·python·面试·职场和发展·llm·agent
承渊政道41 分钟前
【动态规划算法】(完全背包问题从状态定义到空间优化)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
超级大福宝43 分钟前
【力扣48. 旋转图像】超好记忆版 + 口诀
c++·算法·leetcode
爱写代码的倒霉蛋44 分钟前
2023年天梯赛L1-8
数据结构·算法
apollowing1 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(上)
算法·启发式算法·web app
生物信息与育种1 小时前
黄三文院士领衔植物星球计划(PLANeT)发表Cell
人工智能·深度学习·算法·面试·transformer
aini_lovee1 小时前
WSN 四大经典无需测距定位算法
算法
人道领域1 小时前
【LeetCode刷题日记】掌握二叉树遍历:栈实现的三种绝妙方法
算法·leetcode·职场和发展
北冥湖畔的燕雀1 小时前
深入解析Linux信号处理机制
算法
阿Y加油吧2 小时前
二刷 LeetCode:动态规划经典双题复盘
算法·leetcode·动态规划