maximum-level-sum-of-a-binary-tree 1.0.0
Maximum Level Sum of a Binary Tree
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <queue>
3
4using namespace std;
5
9struct TreeNode
10{
11 int val;
14 TreeNode() : val(0), left(nullptr), right(nullptr) {}
15 TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
17};
18
20{
21public:
23 {
24 if (!root)
25 return 0;
26
27 queue<pair<TreeNode*, int>> node_queue; // int represents node's level starting from 1
28 node_queue.push({root, 1});
29
30 int maximal_sum = root->val;
31 int sum_level = 1;
32
33 int current_sum = 0;
34 int current_level_sum = 1;
35
36 while (!node_queue.empty())
37 {
38 TreeNode* current = node_queue.front().first;
39 int level = node_queue.front().second;
40
41 if (level != current_level_sum)
42 {
43 if (current_sum > maximal_sum)
44 {
45 maximal_sum = current_sum;
46 sum_level = current_level_sum;
47 }
48 current_level_sum = level;
49 current_sum = current->val;
50 }
51 else // level == current_level_sum
52 current_sum += current->val;
53
54 node_queue.pop();
55 if (current->left)
56 node_queue.push({current->left, level + 1});
57 if (current->right)
58 node_queue.push({current->right, level + 1});
59 }
60 if (current_sum > maximal_sum)
61 {
62 maximal_sum = current_sum;
63 sum_level = current_level_sum;
64 }
65
66 return sum_level;
67 }
68};
69
71{
72 if (root == nullptr)
73 return;
74 delete_tree(root->left);
75 delete_tree(root->right);
76 delete root;
77}
78
79int main()
80{
81 TreeNode* root = new TreeNode(1, new TreeNode(7, new TreeNode(7), new TreeNode(-8)), new TreeNode(0));
82 Solution sol;
83 cout << "output: " << sol.maxLevelSum(root) << endl;
84 delete_tree(root);
85 return 0;
86}
int maxLevelSum(TreeNode *root)
Definition main.cpp:22
void delete_tree(TreeNode *root)
Definition main.cpp:70
int main()
Definition main.cpp:79
Definition for a binary tree node.
Definition main.cpp:10
int val
Definition main.cpp:11
TreeNode * left
Definition main.cpp:12
TreeNode(int x, TreeNode *left, TreeNode *right)
Definition main.cpp:16
TreeNode * right
Definition main.cpp:13
TreeNode(int x)
Definition main.cpp:15
TreeNode()
Definition main.cpp:14