Skip to content

Commit ce584b2

Browse files
author
kwu130
committed
feat(src): add 107-levelOrderBottom, 108-sortedArrayToBST, 109-sortedListToBST
1 parent 9c34a6d commit ce584b2

3 files changed

Lines changed: 176 additions & 0 deletions

File tree

‎src/107-levelOrderBottom.cpp‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// Created by 1412 on 2025/12/5.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
#include "common.h"
7+
8+
using namespace std;
9+
using treeHelper::TreeNode;
10+
11+
class Solution {
12+
public:
13+
vector<vector<int>> levelOrderBottom(TreeNode* root) {
14+
vector<vector<int>> res;
15+
if (root == nullptr) return res;
16+
queue<TreeNode*> q;
17+
q.push(root);
18+
while (!q.empty()) {
19+
size_t n = q.size();
20+
vector<int> level;
21+
while (n--) {
22+
TreeNode* node = q.front();
23+
q.pop();
24+
level.push_back(node->val);
25+
if (node->left != nullptr) q.push(node->left);
26+
if (node->right != nullptr) q.push(node->right);
27+
}
28+
res.push_back(level);
29+
}
30+
ranges::reverse(res);
31+
return res;
32+
}
33+
};
34+
35+
void test() {
36+
Solution s;
37+
int nullptr_value = -1;
38+
TreeNode* root = treeHelper::build({3, 9, 20, nullptr_value, nullptr_value, 15, 7}, nullptr_value);
39+
vector<vector<int>> expected = {
40+
{15, 7},
41+
{9, 20},
42+
{3}
43+
};
44+
vector<vector<int>> res = s.levelOrderBottom(root);
45+
assert(res == expected);
46+
treeHelper::free(root);
47+
48+
root = treeHelper::build({1}, nullptr_value);
49+
expected = {{1}};
50+
res = s.levelOrderBottom(root);
51+
assert(res == expected);
52+
treeHelper::free(root);
53+
54+
root = treeHelper::build({}, nullptr_value);
55+
expected = {};
56+
res = s.levelOrderBottom(root);
57+
assert(res == expected);
58+
treeHelper::free(root);
59+
}
60+
61+
int main() {
62+
test();
63+
return 0;
64+
}

‎src/108-sortedArrayToBST.cpp‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
//
2+
// Created by 1412 on 2025/12/5.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
#include "common.h"
7+
8+
using namespace std;
9+
using treeHelper::TreeNode;
10+
11+
class Solution {
12+
public:
13+
TreeNode* sortedArrayToBST(vector<int>& nums) {
14+
if (nums.size() == 0) {
15+
return nullptr;
16+
}
17+
return build(nums, 0, nums.size() - 1);
18+
}
19+
20+
private:
21+
TreeNode* build(vector<int>& nums, int left, int right) {
22+
if (left > right) {
23+
return nullptr;
24+
}
25+
int mid = left + (right - left) / 2;
26+
TreeNode* root = new TreeNode(nums[mid]);
27+
root->left = build(nums, left, mid - 1);
28+
root->right = build(nums, mid + 1, right);
29+
return root;
30+
}
31+
};
32+
33+
void test() {
34+
Solution s;
35+
vector<int> nums = {-10, -3, 0, 5, 9};
36+
int nullptr_value = -1;
37+
TreeNode* expected = treeHelper::build({0, -10, 5, nullptr_value, -3, nullptr_value, 9}, nullptr_value);
38+
TreeNode* res = s.sortedArrayToBST(nums);
39+
assert(treeHelper::equal(res, expected));
40+
treeHelper::free(res);
41+
treeHelper::free(expected);
42+
43+
nums = {1, 3};
44+
expected = treeHelper::build({1, nullptr_value, 3}, nullptr_value);
45+
res = s.sortedArrayToBST(nums);
46+
assert(treeHelper::equal(res, expected));
47+
treeHelper::free(res);
48+
treeHelper::free(expected);
49+
}
50+
51+
int main() {
52+
test();
53+
return 0;
54+
}

‎src/109-sortedListToBST.cpp‎

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// Created by 1412 on 2025/12/5.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
#include "common.h"
7+
8+
using namespace std;
9+
using listHelper::ListNode;
10+
using treeHelper::TreeNode;
11+
12+
class Solution {
13+
public:
14+
TreeNode* sortedListToBST(ListNode* head) { return build(head, nullptr); }
15+
16+
private:
17+
TreeNode* build(ListNode* left, ListNode* right) {
18+
if (left == right) {
19+
return nullptr;
20+
}
21+
ListNode* slow = left;
22+
ListNode* fast = left;
23+
// find the middle node
24+
while (fast != right && fast->next != right) {
25+
slow = slow->next;
26+
fast = fast->next->next;
27+
}
28+
TreeNode* root = new TreeNode(slow->val);
29+
root->left = build(left, slow);
30+
root->right = build(slow->next, right);
31+
return root;
32+
}
33+
};
34+
35+
void test() {
36+
Solution s;
37+
ListNode* head = listHelper::build({-10, -3, 0, 5, 9});
38+
TreeNode* root = s.sortedListToBST(head);
39+
int nullptr_value = -1;
40+
TreeNode* expected = treeHelper::build({0, -3, 9, -10, nullptr_value, 5}, nullptr_value);
41+
assert(treeHelper::equal(root, expected));
42+
listHelper::free(head);
43+
treeHelper::free(root);
44+
treeHelper::free(expected);
45+
46+
head = listHelper::build({});
47+
root = s.sortedListToBST(head);
48+
expected = treeHelper::build({}, nullptr_value);
49+
assert(treeHelper::equal(root, expected));
50+
listHelper::free(head);
51+
treeHelper::free(root);
52+
treeHelper::free(expected);
53+
}
54+
55+
int main() {
56+
test();
57+
return 0;
58+
}

0 commit comments

Comments
 (0)