summaryrefslogtreecommitdiff
path: root/top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc')
-rw-r--r--top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc44
1 files changed, 44 insertions, 0 deletions
diff --git a/top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc b/top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc
new file mode 100644
index 0000000..9c506ab
--- /dev/null
+++ b/top-interview-questions/easy/trees/04_binary_tree_level_order_traversal.cc
@@ -0,0 +1,44 @@
1/**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode() : val(0), left(nullptr), right(nullptr) {}
8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10 * };
11 */
12class Solution {
13public:
14 void bfs(vector<vector<int>>& levels,
15 vector<const TreeNode*>& current_level,
16 vector<const TreeNode*>& next_level) {
17 if (current_level.empty()) {
18 return;
19 }
20 levels.push_back({});
21 vector<int>& level = levels.back();
22 level.reserve(current_level.size());
23 for (const TreeNode* node : current_level) {
24 level.push_back(node->val);
25 if (node->left) {
26 next_level.push_back(node->left);
27 }
28 if (node->right) {
29 next_level.push_back(node->right);
30 }
31 }
32 current_level.clear(); // New next level.
33 bfs(levels, next_level, current_level);
34 }
35
36 vector<vector<int>> levelOrder(TreeNode* root) {
37 if (!root) return {};
38 vector<vector<int>> levels;
39 vector<const TreeNode*> current_level({root});
40 vector<const TreeNode*> next_level;
41 bfs(levels, current_level, next_level);
42 return levels;
43 }
44};