File tree 4 files changed +120
-0
lines changed
4 files changed +120
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments