Skip to content

Commit a2cd9c2

Browse files
committed
binary-tree-maximum-path-sum solution
1 parent 85ab3a9 commit a2cd9c2

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def maxPathSum(self, root: Optional[TreeNode]) -> int:
9+
10+
# DFS + ๋ถ„ํ• ์ •๋ณตํ˜• DP
11+
# ์‹œ๊ฐ„๋ณต์žก๋„ O(n), ๊ณต๊ฐ„๋ณต์žก๋„ O(n)
12+
self.answer = float('-inf') # ์ตœ์ €๊ฐ’์„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์„ธํŒ…(dfsํ•จ์ˆ˜์—์„œ๋„ ์“ฐ์ผ ์ˆ˜ ์žˆ๊ฒŒ ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜ ์„ ์–ธํ•ด์„œ ์ „์—ญ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ)
13+
14+
def dfs(node):
15+
if not node:
16+
return 0
17+
18+
# ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์ตœ๋Œ€ํ•ฉ(์Œ์ˆ˜๋ผ๋ฉด ๋ฒ„๋ฆฌ๊ณ  0 ๊ฐ€์ ธ๊ฐ€๊ธฐ)
19+
left = max(0,dfs(node.left))
20+
right = max(0,dfs(node.right))
21+
22+
# ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ตœ๋Œ€ํ•ฉ์œผ๋กœ answer ์—…๋ฐ์ดํŠธ
23+
self.answer = max(self.answer, left + right + node.val)
24+
25+
# ์™ผ์ชฝ,์˜ค๋ฅธ์ชฝ ์ค‘ ์ตœ๋Œ€๊ฐ’ ์„ ํƒ(ํ•œ๋ฐฉํ–ฅ์ด๋‹ˆ๊นŒ)ํ•ด์„œ ๋ถ€๋ชจ์—๊ฒŒ ๋ฆฌํ„ด
26+
return max(left, right) + node.val
27+
28+
29+
dfs(root)
30+
return self.answer

0 commit comments

Comments
ย (0)