Skip to content

Commit b00d511

Browse files
committed
- Binary Tree Maximum Path Sum DaleStudy#287
1 parent ec32e00 commit b00d511

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from typing import Optional
2+
3+
class TreeNode:
4+
def __init__(self, val=0, left=None, right=None):
5+
self.val = val
6+
self.left = left
7+
self.right = right
8+
class Solution:
9+
"""
10+
- Time Complexity: O(n), n = The number of nodes
11+
- Space Complexity: O(H), H = The height of Tree
12+
"""
13+
def maxPathSum(self, root: Optional[TreeNode]) -> int:
14+
self.max_sum = float("-inf")
15+
16+
def dfs(node):
17+
if not node:
18+
return 0
19+
20+
# Find max sum from the left and right children (more than 0)
21+
l_sum = max(dfs(node.left), 0)
22+
r_sum = max(dfs(node.right), 0)
23+
24+
# Calculate current sum and update max_sum
25+
current_sum = node.val + l_sum + r_sum
26+
self.max_sum = max(self.max_sum, current_sum)
27+
28+
# Return larger path
29+
return node.val + max(l_sum, r_sum)
30+
31+
dfs(root)
32+
33+
return self.max_sum
34+
35+
def do_test():
36+
sol = Solution()
37+
38+
root1 = TreeNode(1)
39+
root1.left = TreeNode(2)
40+
root1.right = TreeNode(3)
41+
e1 = 6
42+
r1 = sol.maxPathSum(root1)
43+
print(f"TC 1 is Passed!" if r1 == e1 else f"TC 1 is Failed! - Expected: {e1}, Result: {r1}")
44+
45+
root2 = TreeNode(-10)
46+
root2.left = TreeNode(9)
47+
root2.right = TreeNode(20)
48+
root2.right.left = TreeNode(15)
49+
root2.right.right = TreeNode(7)
50+
e2 = 42
51+
r2 = sol.maxPathSum(root2)
52+
print(f"TC 2 is Passed!" if r2 == e2 else f"TC 2 is Failed! - Expected: {e2}, Result: {r2}")
53+
54+
do_test()

0 commit comments

Comments
 (0)