codekofi
← All problems

Problem 75

Medium

1 · Worked examples

0 / 3

Type an input and write what you think is the output . Each problem is converted to Web Assembly, so any possible input will show the corresponding output. Only correct predictions count.

solution()
returns

2 · Which problem is it?

Locked until you have predicted 3 outputs correctly.

The accepted solution

1struct Node {
2 int val;
3 Node* left;
4 Node* right;
5};
6
7Node* build(const vector<optional<int>>& level) {
8
9 if (level.empty() || !level[0]) {
10 return nullptr;
11 }
12
13 Node* root = new Node{*level[0], nullptr, nullptr};
14
15 queue<Node*> q;
16 q.push(root);
17
18 int i = 1;
19 int n = level.size();
20
21 while (!q.empty() && i < n) {
22
23 Node* node = q.front();
24 q.pop();
25
26 if (level[i]) {
27 node->left = new Node{*level[i], nullptr, nullptr};
28 q.push(node->left);
29 }
30
31 i++;
32
33 if (i < n && level[i]) {
34 node->right = new Node{*level[i], nullptr, nullptr};
35 q.push(node->right);
36 }
37
38 i++;
39 }
40
41 return root;
42}
43
44vector<vector<int>> solution(const vector<optional<int>>& level) {
45
46 Node* root = build(level);
47 vector<vector<int>> ans;
48
49 if (!root) {
50 return ans;
51 }
52
53 queue<Node*> q;
54 q.push(root);
55
56 while (!q.empty()) {
57
58 int wide = q.size();
59 vector<int> row;
60
61 for (int i = 0; i < wide; i++) {
62
63 Node* node = q.front();
64 q.pop();
65
66 row.push_back(node->val);
67
68 if (node->left) {
69 q.push(node->left);
70 }
71
72 if (node->right) {
73 q.push(node->right);
74 }
75 }
76
77 ans.push_back(row);
78 }
79
80 return ans;
81}

Names have been stripped. The signature is the only clue you get for free. Compiled as C++20 with the standard headers and using namespace std; already in scope.