Skip to content

Commit afabd60

Browse files
committed
add_files("../leetcode-treenode-cpp/*.ixx");
1 parent 392deff commit afabd60

File tree

11 files changed

+266
-17
lines changed

11 files changed

+266
-17
lines changed

insert-into-a-binary-search-tree/xmake.lua

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
if is_mode("test") then add_requires("vcpkg::eventpp") end
22
set_policy("platform.longpaths", true)
3-
add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
4-
add_repositories(
5-
"masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
3+
-- add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
4+
-- add_repositories(
5+
-- "masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
66
add_rules("mode.debug", "mode.release");
7-
add_requires("leetcode-treenode-cpp 1.1.7");
7+
-- add_requires("leetcode-treenode-cpp 1.1.7");
88
add_requires("vcpkg::cppunit");
99
set_languages("c17", "cxx20");
1010
target("insert-into-a-binary-search-tree-test");
@@ -23,5 +23,6 @@ set_policy("build.c++.modules", true);
2323
add_files("*.ixx");
2424
add_files("test.cpp");
2525
add_packages("vcpkg::cppunit");
26-
add_packages("leetcode-treenode-cpp");
26+
-- add_packages("leetcode-treenode-cpp");
27+
add_files("../leetcode-treenode-cpp/*.ixx");
2728
target_end();
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
set_policy("platform.longpaths", true)
2-
add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
3-
add_repositories(
4-
"masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
2+
-- add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
3+
-- add_repositories(
4+
-- "masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
55
add_rules("mode.debug", "mode.release");
6-
add_requires("leetcode-treenode-cpp 1.1.7");
6+
-- add_requires("leetcode-treenode-cpp 1.1.7");
77
set_languages("c17", "cxx20");
88
add_requires("vcpkg::gtest");
99
target("insufficient-nodes-in-root-to-leaf-paths-test");
1010
set_group("test")
1111
set_default(false)
1212
set_kind("binary");
13-
add_files("debugTreeNode.ixx");
13+
-- add_files("debugTreeNode.ixx");
1414
add_files("printTreeNode.ixx", "*.ixx");
1515
set_languages("c++20");
1616
set_policy("build.c++.modules", true);
1717
add_files("test.cpp");
1818
add_packages("vcpkg::gtest");
19-
add_packages("leetcode-treenode-cpp");
19+
-- add_packages("leetcode-treenode-cpp");
20+
add_files("../leetcode-treenode-cpp/*.ixx");
2021
target_end();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module;
2+
3+
#include <string>
4+
5+
#include <iterator>
6+
#include <regex>
7+
#include <sstream>
8+
9+
export module leetcode_treenode_cpp.LeetCodeTreeNodeToString;
10+
11+
import leetcode_treenode_cpp.TreeNode;
12+
13+
import leetcode_treenode_cpp.bfsTravelsal;
14+
15+
namespace leetcode_treenode_cpp {
16+
17+
export auto LeetCodeTreeNodeToString(TreeNode* root) -> std::string
18+
{
19+
20+
std::stringstream sstream;
21+
auto result = bfsTravelsal(root);
22+
std::regex vowel_re("(,null){1,}\\]$");
23+
24+
std::regex_replace(std::ostreambuf_iterator<char>(sstream), result.begin(),
25+
result.end(), vowel_re, "]");
26+
return sstream.str();
27+
}
28+
29+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module;
2+
3+
#include <queue>
4+
#include <string>
5+
export module leetcode_treenode_cpp.bfsTravelsal;
6+
7+
import leetcode_treenode_cpp.TreeNode;
8+
namespace leetcode_treenode_cpp {
9+
10+
export
11+
12+
std::string
13+
bfsTravelsal(TreeNode* root)
14+
{
15+
std::string result = "[";
16+
std::queue<TreeNode*> nodeQueue;
17+
nodeQueue.push(root);
18+
while (!nodeQueue.empty()) {
19+
TreeNode* node = nodeQueue.front();
20+
nodeQueue.pop();
21+
if (node == nullptr) {
22+
result += "null,";
23+
} else {
24+
result += std::to_string(node->val) + ",";
25+
nodeQueue.push(node->left);
26+
nodeQueue.push(node->right);
27+
}
28+
}
29+
if (result == std::string("[null,")) {
30+
return "[]";
31+
}
32+
result[result.size() - 1] = ']';
33+
return result;
34+
}
35+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module;
2+
3+
export module leetcode_treenode_cpp.freeTreeNode;
4+
import leetcode_treenode_cpp.TreeNode;
5+
6+
namespace leetcode_treenode_cpp {
7+
export void freeTreeNode(TreeNode* root)
8+
{
9+
10+
if (root == nullptr) {
11+
12+
return;
13+
}
14+
15+
freeTreeNode(root->left);
16+
freeTreeNode(root->right);
17+
delete root;
18+
}
19+
20+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
module;
2+
3+
#include <queue>
4+
#include <string>
5+
6+
export module leetcode_treenode_cpp.parseLeetCodeBinaryTree;
7+
8+
import leetcode_treenode_cpp.TreeNode;
9+
import leetcode_treenode_cpp.freeTreeNode;
10+
namespace leetcode_treenode_cpp {
11+
12+
struct token {
13+
bool isDigit;
14+
int digit;
15+
token(bool i, int d)
16+
: isDigit(i)
17+
, digit(d)
18+
{
19+
}
20+
};
21+
22+
int tokenize(std::string& rawString, std::queue<token>& tokenQueue)
23+
{
24+
auto sign = 1;
25+
int digit = 0;
26+
bool digitFlag = false;
27+
28+
for (int i = 0; i < rawString.size(); i++) {
29+
if (rawString[i] <= '9' && rawString[i] >= '0') {
30+
digit = digit * 10 + rawString[i] - '0';
31+
digitFlag = true;
32+
} else if (rawString[i] == '-') {
33+
sign = -1;
34+
} else if (rawString[i] == ',') {
35+
if (digitFlag)
36+
tokenQueue.emplace(true, digit * sign);
37+
digit = 0;
38+
digitFlag = false;
39+
sign = 1;
40+
} else if (rawString[i] == ' ') {
41+
continue;
42+
} else if (rawString[i] == '[') {
43+
continue;
44+
} else if (rawString[i] == ']') {
45+
if (digitFlag) {
46+
tokenQueue.emplace(true, digit * sign);
47+
}
48+
continue;
49+
} else if (rawString[i] == 'n' && static_cast<unsigned long long>(i) + 3 < rawString.size() && rawString[static_cast<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::size_type>(i) + 1] == 'u' && rawString[static_cast<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::size_type>(i) + 2] == 'l' && rawString[static_cast<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::size_type>(i) + 2] == 'l') {
50+
i += 3;
51+
tokenQueue.emplace(false, 0);
52+
} else {
53+
54+
return -1;
55+
}
56+
}
57+
return 0;
58+
}
59+
60+
export int parseLeetCodeBinaryTree(std::string& rawString, TreeNode** pRoot)
61+
{
62+
*pRoot = nullptr;
63+
std::queue<token> tokenQueue;
64+
int status = tokenize(rawString, tokenQueue);
65+
if (status != 0) {
66+
return -1;
67+
}
68+
if (tokenQueue.empty() || !tokenQueue.front().isDigit) {
69+
return 0;
70+
}
71+
72+
std::queue<TreeNode*> nodeQueue;
73+
int rootVal = tokenQueue.front().digit;
74+
tokenQueue.pop();
75+
*pRoot = new TreeNode(rootVal);
76+
nodeQueue.push(*pRoot);
77+
78+
while (!nodeQueue.empty()) {
79+
TreeNode* currentNode = nodeQueue.front();
80+
nodeQueue.pop();
81+
82+
if (!tokenQueue.empty()) {
83+
token leftChild = tokenQueue.front();
84+
tokenQueue.pop();
85+
if (leftChild.isDigit) {
86+
currentNode->left = new TreeNode(leftChild.digit);
87+
nodeQueue.push(currentNode->left);
88+
}
89+
}
90+
91+
if (!tokenQueue.empty()) {
92+
token rightChild = tokenQueue.front();
93+
tokenQueue.pop();
94+
if (rightChild.isDigit) {
95+
currentNode->right = new TreeNode(rightChild.digit);
96+
nodeQueue.push(currentNode->right);
97+
}
98+
}
99+
}
100+
101+
if (!tokenQueue.empty()) {
102+
freeTreeNode(*pRoot);
103+
return -2;
104+
}
105+
106+
return 0;
107+
}
108+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module;
2+
#include <iostream>
3+
#include <sstream>
4+
#include <string>
5+
6+
export module leetcode_treenode_cpp.serializeTreeNode;
7+
8+
import leetcode_treenode_cpp.TreeNode;
9+
namespace leetcode_treenode_cpp {
10+
// using std::basic_stringstream;
11+
using std::string;
12+
using std::stringstream;
13+
export string serializeTreeNode(TreeNode* root)
14+
{
15+
16+
stringstream sstream;
17+
if (root == nullptr) {
18+
19+
sstream
20+
<< "null";
21+
return sstream.str();
22+
}
23+
24+
sstream << "TreeNode";
25+
sstream << "{val:" << root->val;
26+
sstream << ",left:" << serializeTreeNode(root->left);
27+
sstream << ",right:" << serializeTreeNode(root->right) << "}";
28+
return sstream.str();
29+
}
30+
31+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module;
2+
#include <vector>
3+
export module leetcode_treenode_cpp.traversalTreeNode;
4+
5+
import leetcode_treenode_cpp.TreeNode;
6+
namespace leetcode_treenode_cpp {
7+
using std::vector;
8+
9+
export void traversalTreeNode(TreeNode* root, vector<TreeNode*>& nodes)
10+
{
11+
12+
if (root == nullptr) {
13+
14+
return;
15+
}
16+
17+
traversalTreeNode(root->left, nodes);
18+
traversalTreeNode(root->right, nodes);
19+
20+
nodes.emplace_back(root);
21+
}
22+
23+
}

xmake.lua

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
set_policy("platform.longpaths", true)
22
set_languages("c17", "cxx20");
3-
add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
4-
add_repositories(
5-
"masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
6-
add_requires("leetcode-treenode-cpp 1.1.7");
3+
-- add_repositories("masx200/xmake-repo https://gitee.com/masx200/xmake-repo.git");
4+
-- add_repositories(
5+
-- "masx200/xmake-repo https://ghproxy.com/https://github.com/masx200/xmake-repo.git");
6+
-- add_requires("leetcode-treenode-cpp 1.1.7");
77
target('leetcode-test')
88
set_languages("c++20");
99
set_kind('static')
1010
set_policy("build.c++.modules", true);
1111
add_files('*/*.ixx', {install = true})
12-
add_packages("leetcode-treenode-cpp");
12+
-- add_packages("leetcode-treenode-cpp");
13+
add_files("./leetcode-treenode-cpp/*.ixx");
1314
target_end()
1415
includes("./*/xmake.lua")

xmake.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async function main() {
3030
const args = parse(Deno.args);
3131
const __dirname = Deno.cwd();
3232
console.log(JSON.stringify(args));
33-
const { sdk, toolchain, group, mode } = args;
33+
const { sdk, toolchain, group = "test", mode = "test" } = args;
3434
const { executable = "xmake" } = args;
3535
for await (const file of findFilesRecursive(__dirname, "test.cpp")) {
3636
await RunXmake(file, toolchain, sdk, executable, group, mode);

0 commit comments

Comments
 (0)