diff --git a/src/binary_tree/bfs/maximum_level_sum_of_a_binary_tree/__init__.py b/src/binary_tree/bfs/maximum_level_sum_of_a_binary_tree/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binary_tree/bfs/maximum_level_sum_of_a_binary_tree/solution.py b/src/binary_tree/bfs/maximum_level_sum_of_a_binary_tree/solution.py new file mode 100644 index 0000000..a4c6ab4 --- /dev/null +++ b/src/binary_tree/bfs/maximum_level_sum_of_a_binary_tree/solution.py @@ -0,0 +1,27 @@ +from collections import deque +from typing import Optional +from structures import TreeNode + + +class Solution: + def maxLevelSum(self, root: Optional[TreeNode]) -> int: + curr_lvl = 1 + maximum = float("-inf") + ans = 1 + queue = deque([root]) + + while queue: + curr_sum = 0 + lvl_size = len(queue) + for _ in range(lvl_size): + node = queue.popleft() + curr_sum += node.val + if node.left: + queue.append(node.left) + if node.right: + queue.append(node.right) + if curr_sum > maximum: + maximum = curr_sum + ans = curr_lvl + curr_lvl += 1 + return ans diff --git a/tests/test_maximum_level_sum_of_a_binary_tree.py b/tests/test_maximum_level_sum_of_a_binary_tree.py new file mode 100644 index 0000000..e86efbb --- /dev/null +++ b/tests/test_maximum_level_sum_of_a_binary_tree.py @@ -0,0 +1,16 @@ +import pytest +from src.binary_tree.bfs.maximum_level_sum_of_a_binary_tree.solution import Solution +from test_utils import TreeBuilder + + +@pytest.mark.parametrize( + "root, expected", + [ + ([1, 7, 0, 7, -8, None, None], 2), + ([989, None, 10250, 98693, -89388, None, None, None, -32127], 2), + ], +) +def test_max_depth(root, expected): + root = TreeBuilder.from_list(root) + solution = Solution() + assert solution.maxLevelSum(root) == expected