From 3f06780b3044d5ae9be3ffa44262dbcfa7b9cdf8 Mon Sep 17 00:00:00 2001 From: tom4649 Date: Tue, 30 Jun 2026 06:54:31 +0900 Subject: [PATCH 1/2] step1,2 --- 0124.Binary-Tree-Maximum-Path-Sum/memo.md | 17 ++++++++++++++ 0124.Binary-Tree-Maximum-Path-Sum/step1.py | 27 ++++++++++++++++++++++ 0124.Binary-Tree-Maximum-Path-Sum/step2.py | 27 ++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 0124.Binary-Tree-Maximum-Path-Sum/memo.md create mode 100644 0124.Binary-Tree-Maximum-Path-Sum/step1.py create mode 100644 0124.Binary-Tree-Maximum-Path-Sum/step2.py diff --git a/0124.Binary-Tree-Maximum-Path-Sum/memo.md b/0124.Binary-Tree-Maximum-Path-Sum/memo.md new file mode 100644 index 0000000..e846b3e --- /dev/null +++ b/0124.Binary-Tree-Maximum-Path-Sum/memo.md @@ -0,0 +1,17 @@ +# 124. Binary Tree Maximum Path Sum + +## step1 +再帰で書く。12mぐらい。 + +以下の点を間違えた +- 左右の子ノードを使う最大値を親ノードに返す(pathが分岐する) +- 関数を呼び出さずにmax_sumを返す + +## 他の人のコード +https://github.com/shining-ai/leetcode/pull/69 + +考え方自体は同じだが書き方がやや異なる。 + +## step2 +参考にして改善 + diff --git a/0124.Binary-Tree-Maximum-Path-Sum/step1.py b/0124.Binary-Tree-Maximum-Path-Sum/step1.py new file mode 100644 index 0000000..c8e958f --- /dev/null +++ b/0124.Binary-Tree-Maximum-Path-Sum/step1.py @@ -0,0 +1,27 @@ +import math + +# Definition for a binary tree node. +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + +class Solution: + def maxPathSum(self, root: TreeNode | None) -> int: + max_sum = -math.inf + + def update_max_sum(node): + # update the max sum of the tree + # return the max sum using the node as the root of the path + nonlocal max_sum + if node is None: + return -math.inf + max_sum_left = update_max_sum(node.left) + max_sum_right = update_max_sum(node.right) + max_sum_self = node.val + max(0, max_sum_left, max_sum_right) + max_sum = max(max_sum, max_sum_self, node.val + max_sum_left+max_sum_right) + return max_sum_self + + update_max_sum(root) + return max_sum diff --git a/0124.Binary-Tree-Maximum-Path-Sum/step2.py b/0124.Binary-Tree-Maximum-Path-Sum/step2.py new file mode 100644 index 0000000..8001d18 --- /dev/null +++ b/0124.Binary-Tree-Maximum-Path-Sum/step2.py @@ -0,0 +1,27 @@ +import math + +# Definition for a binary tree node. +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + +class Solution: + def maxPathSum(self, root: TreeNode | None) -> int: + + def get_max_sums(node): + # 返り値: (部分木の最大パス和, 親へ繋げられる片側の枝の最大和) + if node is None: + return -math.inf, 0 + + left_max_sum, left_branch_max = get_max_sums(node.left) + right_max_sum, right_branch_max = get_max_sums(node.right) + + subtree_max = max(left_max_sum, right_max_sum, node.val + left_branch_max + right_branch_max) + branch_max = max(0, node.val + max(left_branch_max, right_branch_max)) + + return subtree_max, branch_max + + max_sum, _ = get_max_sums(root) + return max_sum From 97974a7da1714bfbfd4cfa1b71833edd0ea0ddbb Mon Sep 17 00:00:00 2001 From: tom4649 Date: Wed, 1 Jul 2026 05:57:53 +0900 Subject: [PATCH 2/2] Add suggested changes --- .../step1_revised.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 0124.Binary-Tree-Maximum-Path-Sum/step1_revised.py diff --git a/0124.Binary-Tree-Maximum-Path-Sum/step1_revised.py b/0124.Binary-Tree-Maximum-Path-Sum/step1_revised.py new file mode 100644 index 0000000..3d2fda3 --- /dev/null +++ b/0124.Binary-Tree-Maximum-Path-Sum/step1_revised.py @@ -0,0 +1,27 @@ +import math + +# Definition for a binary tree node. +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + +class Solution: + def maxPathSum(self, root: TreeNode | None) -> int: + max_sum = -math.inf + + def update_max_sum(node): + # update the max sum of the tree + # return the max sum using the node as the root of the path + nonlocal max_sum + if node is None: + return -math.inf + max_sum_left = update_max_sum(node.left) + max_sum_right = update_max_sum(node.right) + max_sum_self = node.val + max(0, max_sum_left, max_sum_right) + max_sum = max(max_sum, max_sum_self, node.val + max_sum_left + max_sum_right) + return max_sum_self + + update_max_sum(root) + return max_sum