Skip to content

Commit 1d62973

Browse files
committed
102. Binary Tree Level Order Traversal
1 parent c3fce95 commit 1d62973

File tree

4 files changed

+120
-0
lines changed

4 files changed

+120
-0
lines changed

102/step1.cpp

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
Solve Time: 21:38
3+
4+
Time : O(N^2)
5+
Space : O(N^2)
6+
*/
7+
class Solution {
8+
public:
9+
vector<vector<int>> levelOrder(TreeNode* root) {
10+
if (!root) {
11+
return {};
12+
}
13+
auto left = levelOrder(root->left);
14+
auto right = levelOrder(root->right);
15+
auto merged_level_vals = merge_two_trees(left, right);
16+
vector<vector<int>> level_order = {{root->val}};
17+
level_order.insert(level_order.end(), merged_level_vals.begin(), merged_level_vals.end());
18+
return level_order;
19+
}
20+
21+
private:
22+
vector<vector<int>> merge_two_trees(vector<vector<int>>& left, vector<vector<int>>& right) {
23+
vector<vector<int>> merged_levels;
24+
for (int i = 0; i < max(left.size(), right.size()); ++i) {
25+
vector<int> current_level_vals;
26+
if (i < left.size()) {
27+
current_level_vals.insert(current_level_vals.end(), left[i].begin(), left[i].end());
28+
}
29+
if (i < right.size()) {
30+
current_level_vals.insert(current_level_vals.end(), right[i].begin(), right[i].end());
31+
}
32+
merged_levels.push_back(current_level_vals);
33+
}
34+
return merged_levels;
35+
}
36+
};

102/step2_1.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
Time : O(N)
3+
Space : O(N)
4+
5+
再帰を用いずに書いてみる。
6+
currentはnextとの対比として自然なので使用した。
7+
XXX_level_nodesはちょっと変数名がくどすぎる気もしたが、今見ているlevelというのを強調できるのでcurrent_nodesなどよりも適切に感じる。
8+
9+
*/
10+
class Solution {
11+
public:
12+
vector<vector<int>> levelOrder(TreeNode* root) {
13+
vector<vector<int>> level_order;
14+
queue<TreeNode*> current_level_nodes;
15+
queue<TreeNode*> next_level_nodes;
16+
current_level_nodes.push(root);
17+
while (true) {
18+
vector<int> same_level_vals;
19+
while (!current_level_nodes.empty()) {
20+
auto node = current_level_nodes.front();
21+
current_level_nodes.pop();
22+
if (!node) {
23+
continue;
24+
}
25+
same_level_vals.push_back(node->val);
26+
next_level_nodes.push(node->left);
27+
next_level_nodes.push(node->right);
28+
}
29+
swap(current_level_nodes, next_level_nodes);
30+
if (same_level_vals.empty()) {
31+
break;
32+
}
33+
level_order.push_back(same_level_vals);
34+
}
35+
return level_order;
36+
}
37+
};

102/step2_2.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> levelOrder(TreeNode* root) {
4+
vector<vector<int>> level_ordered_nums;
5+
vector<TreeNode*> current_level_nodes = {root};
6+
while (!current_level_nodes.empty()) {
7+
vector<TreeNode*> next_level_nodes;
8+
vector<int> same_level_nums;
9+
for (int i = 0; i < current_level_nodes.size(); ++i) {
10+
if (!current_level_nodes[i]) {
11+
continue;
12+
}
13+
same_level_nums.push_back(current_level_nodes[i]->val);
14+
next_level_nodes.push_back(current_level_nodes[i]->left);
15+
next_level_nodes.push_back(current_level_nodes[i]->right);
16+
}
17+
if (same_level_nums.empty()) {
18+
break;
19+
}
20+
level_ordered_nums.push_back(same_level_nums);
21+
swap(current_level_nodes, next_level_nodes);
22+
}
23+
return level_ordered_nums;
24+
}
25+
};

102/step3.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> levelOrder(TreeNode* root) {
4+
if (!root) {
5+
return {};
6+
}
7+
vector<vector<int>> level_order = {{root->val}};
8+
auto left_level_order = levelOrder(root->left);
9+
auto right_level_order = levelOrder(root->right);
10+
for (int i = 0; i < max(left_level_order.size(), right_level_order.size()); ++i) {
11+
vector<int> same_level_values;
12+
if (i < left_level_order.size()) {
13+
same_level_values.insert(same_level_values.end(), left_level_order[i].begin(), left_level_order[i].end());
14+
}
15+
if (i < right_level_order.size()) {
16+
same_level_values.insert(same_level_values.end(), right_level_order[i].begin(), right_level_order[i].end());
17+
}
18+
level_order.push_back(same_level_values);
19+
}
20+
return level_order;
21+
}
22+
};

0 commit comments

Comments
 (0)