Skip to content

Commit 9a79f4a

Browse files
authored
Create maximum-level-sum-of-a-binary-tree.cpp
1 parent 34da2f9 commit 9a79f4a

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Time: O(n)
2+
// Space: O(h)
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* struct TreeNode {
7+
* int val;
8+
* TreeNode *left;
9+
* TreeNode *right;
10+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
11+
* };
12+
*/
13+
14+
// dfs solution
15+
class Solution {
16+
public:
17+
int maxLevelSum(TreeNode* root) {
18+
vector<int> level_sums;
19+
dfs(root, 0, &level_sums);
20+
return distance(level_sums.cbegin(),
21+
max_element(level_sums.cbegin(), level_sums.cend())) + 1;
22+
}
23+
24+
private:
25+
void dfs(TreeNode *node, int i, vector<int> *level_sums) {
26+
if (!node) {
27+
return;
28+
}
29+
if (i == level_sums->size()) {
30+
level_sums->emplace_back();
31+
}
32+
(*level_sums)[i] += node->val;
33+
dfs(node->left, i + 1, level_sums);
34+
dfs(node->right, i + 1, level_sums);
35+
}
36+
};
37+
38+
// Time: O(n)
39+
// Space: O(w)
40+
// bfs solution
41+
class Solution2 {
42+
public:
43+
int maxLevelSum(TreeNode* root) {
44+
int result = 0, level = 1, max_total = numeric_limits<int>::min();
45+
queue<TreeNode*> q({root});
46+
while (!q.empty()) {
47+
queue<TreeNode*> next_q;
48+
int total = 0;
49+
while (!q.empty()) {
50+
const auto node = q.front(); q.pop();
51+
total += node->val;
52+
if (node->left) {
53+
next_q.emplace(node->left);
54+
}
55+
if (node->right) {
56+
next_q.emplace(node->right);
57+
}
58+
}
59+
if (total > max_total) {
60+
max_total = total;
61+
result = level;
62+
}
63+
q = move(next_q);
64+
++level;
65+
}
66+
return result;
67+
}
68+
};

0 commit comments

Comments
 (0)