【DFS】LeetCode 124. 二叉树中的最大路径和
题目链接
思路
一个子树内部的最大路径和 = 左子树提供的最大路径和 + 根节点值 + 右子树提供的最大路径和。即 dfs(root.left)+root.val+dfs(root.right)
定义dfs函数:返回当前子树能向父节点“提供”的最大路径和。即,一条从父节点延伸下来的路径,能在当前子树中捞取的最大收益。分三种情况:
- 路径停在当前子树的根节点,在当前子树的最大收益:
root.val + 0
- 走左子树:
root.val + dfs(root.left)
- 走右子树:
root.val + dfs(root.right)
使用 Math.max(leftValue + root.val, rightValue + root.val)
来获取左右子树的贡献最大值,因为贡献有可能是负数,所以需要 return Math.max(max, 0)
代码
class Solution {
private int result = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return this.result;
}
private int dfs(TreeNode root){
if(root == null){
return 0;
}
int leftValue = dfs(root.left);
int rightValue = dfs(root.right);
result = Math.max(result, root.val + leftValue + rightValue);
// 计算当前分支对父结点的贡献
int max = Math.max(leftValue + root.val, rightValue + root.val);
// 如果贡献值为负数,则返回值为0,说明没有选择这个结点
return Math.max(max, 0);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix