Skip to content

Commit 7fcedc8

Browse files
authored
Create maximum-level-sum-of-a-binary-tree.py
1 parent 9a79f4a commit 7fcedc8

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Time: O(n)
2+
# Space: O(h)
3+
4+
import collections
5+
6+
7+
# Definition for a binary tree node.
8+
class TreeNode(object):
9+
def __init__(self, x):
10+
self.val = x
11+
self.left = None
12+
self.right = None
13+
14+
15+
# dfs solution
16+
class Solution(object):
17+
def maxLevelSum(self, root):
18+
"""
19+
:type root: TreeNode
20+
:rtype: int
21+
"""
22+
def dfs(node, i, level_sums):
23+
if not node:
24+
return
25+
if i == len(level_sums):
26+
level_sums.append(0)
27+
level_sums[i] += node.val
28+
dfs(node.left, i+1, level_sums)
29+
dfs(node.right, i+1, level_sums)
30+
31+
level_sums = []
32+
dfs(root, 0, level_sums)
33+
return level_sums.index(max(level_sums))+1
34+
35+
36+
# Time: O(n)
37+
# Space: O(w)
38+
# bfs solution
39+
class Solution2(object):
40+
def maxLevelSum(self, root):
41+
"""
42+
:type root: TreeNode
43+
:rtype: int
44+
"""
45+
result, level, max_total = 0, 1, float("-inf")
46+
q = collections.deque([root])
47+
while q:
48+
total = 0
49+
for _ in xrange(len(q)):
50+
node = q.popleft()
51+
total += node.val
52+
if node.left:
53+
q.append(node.left)
54+
if node.right:
55+
q.append(node.right)
56+
if total > max_total:
57+
result, max_total = level, total
58+
level += 1
59+
return result

0 commit comments

Comments
 (0)