Skip to content

Commit be89619

Browse files
committed
四刷124
1 parent a0263ac commit be89619

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

docs/0124-binary-tree-maximum-path-sum.adoc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ image::images/0124-02.jpg[{image_attr}]
4040

4141
深度优先遍历,如果子树路径和大于零,则累加,否则取 `0`。
4242

43+
为了处理负数情况,每次从左右子树返回时,与 `0` 相比取最大值。这样就可以简化对负数的处理。
44+
4345
image::images/0124-10.png[{image_attr}]
4446

4547
[[src-0124]]
@@ -71,6 +73,15 @@ include::{sourcedir}/_0124_BinaryTreeMaximumPathSum_2.java[tag=answer]
7173
include::{sourcedir}/_0124_BinaryTreeMaximumPathSum_3.java[tag=answer]
7274
----
7375
--
76+
77+
四刷::
78+
+
79+
--
80+
[{java_src_attr}]
81+
----
82+
include::{sourcedir}/_0124_BinaryTreeMaximumPathSum_4.java[tag=answer]
83+
----
84+
--
7485
====
7586

7687

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2099,6 +2099,11 @@ endif::[]
20992099
|{doc_base_url}/0480-sliding-window-median.adoc[题解]
21002100
|⭕️ 滑动窗口+对顶堆。思路有,代码没写出来!
21012101

2102+
|{counter:codes2503}
2103+
|{leetcode_base_url}/binary-tree-maximum-path-sum/[124. 二叉树中的最大路径和^]
2104+
|{doc_base_url}/0124-binary-tree-maximum-path-sum.adoc[题解]
2105+
|✅ 深度优先搜索。为了处理负数情况,每次从左右子树返回时,与 `0` 相比取最大值。这样就可以简化对负数的处理。
2106+
21022107
|===
21032108

21042109
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import com.diguage.algo.util.TreeNode;
4+
5+
import java.util.Objects;
6+
7+
public class _0124_BinaryTreeMaximumPathSum_4 {
8+
// tag::answer[]
9+
10+
/**
11+
* @author D瓜哥 · https://www.diguage.com
12+
* @since 2025-12-14 22:15:08
13+
*/
14+
int result = Integer.MIN_VALUE;
15+
16+
public int maxPathSum(TreeNode root) {
17+
dfs(root);
18+
return result;
19+
}
20+
21+
private int dfs(TreeNode root) {
22+
if (Objects.isNull(root)) {
23+
return 0;
24+
}
25+
int left = Math.max(0, dfs(root.left));
26+
int right = Math.max(0, dfs(root.right));
27+
result = Math.max(result, left + right + root.val);
28+
return Math.max(left, right) + root.val;
29+
}
30+
// end::answer[]
31+
}

0 commit comments

Comments
 (0)