File tree 2 files changed +20
-27
lines changed
Algorithms/0124.binary-tree-maximum-path-sum
2 files changed +20
-27
lines changed Original file line number Diff line number Diff line change @@ -8,44 +8,31 @@ type TreeNode = kit.TreeNode
8
8
9
9
func maxPathSum (root * TreeNode ) int {
10
10
if root == nil {
11
- return - 1 << 31
11
+ return 0
12
12
}
13
13
14
- sum := root .Val +
15
- max (0 , maxSince (root .Left )) +
16
- max (0 , maxSince (root .Right ))
17
-
18
- return max (
19
- sum ,
20
- max (
21
- maxPathSum (root .Left ),
22
- maxPathSum (root .Right ),
23
- ),
24
- )
25
- }
26
-
27
- // 返回,从 root 出发,包含 root 在内的所有可能路径的最大的 sum 值
28
- func maxSince (root * TreeNode ) int {
29
- res := - 1 << 31
14
+ maxSum := root .Val
30
15
31
- var dfs func (* TreeNode , int )
32
- dfs = func (root * TreeNode , sum int ) {
16
+ // 返回,从 root 出发,包含 root 在内的所有可能路径的最大的 sum 值
17
+ var dfs func (* TreeNode ) int
18
+ dfs = func (root * TreeNode ) int {
33
19
if root == nil {
34
- return
20
+ return 0
35
21
}
36
22
37
- sum += root .Val
38
- if res < sum {
39
- res = sum
23
+ left := max (0 , dfs (root .Left ))
24
+ right := max (0 , dfs (root .Right ))
25
+ sum := left + root .Val + right
26
+ if maxSum < sum {
27
+ maxSum = sum
40
28
}
41
29
42
- dfs (root .Left , sum )
43
- dfs (root .Right , sum )
30
+ return max (left , right ) + root .Val
44
31
}
45
32
46
- dfs (root , 0 )
33
+ dfs (root )
47
34
48
- return res
35
+ return maxSum
49
36
}
50
37
51
38
func max (a , b int ) int {
Original file line number Diff line number Diff line change @@ -18,6 +18,12 @@ func Test_Problem0124(t *testing.T) {
18
18
ans int
19
19
}{
20
20
21
+ {
22
+ []int {},
23
+ []int {},
24
+ 0 ,
25
+ },
26
+
21
27
{
22
28
[]int {- 10 , 100 , - 1 , - 2 },
23
29
[]int {- 10 , - 1 , 100 , - 2 },
You can’t perform that action at this time.
0 commit comments