Skip to content

Commit 8c98a36

Browse files
🌴 Day 9
1 parent f2ec22d commit 8c98a36

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
## Week 2 🚧
1818

1919
1. [Binary Search](https://leetcode.com/explore/challenge/card/october-leetcoding-challenge/560/week-2-october-8th-october-14th/3488/) ➡️ [CPP Solution](Week2/search.cpp)
20+
2. [Serialize and Deserialize BST](https://leetcode.com/explore/challenge/card/october-leetcoding-challenge/560/week-2-october-8th-october-14th/3489/) ➡️ [CPP Solution](Week2/Codec.cpp)
2021

2122
## Week 3 🚧
2223

Week2/Codec.cpp

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Codec {
11+
private:
12+
char delimiter = ' ';
13+
14+
// PreOrder
15+
void dfs(TreeNode* root, string& s) {
16+
if(root == NULL) return;
17+
18+
s.append(to_string(root->val) + delimiter);
19+
20+
dfs(root->left, s);
21+
dfs(root->right, s);
22+
}
23+
24+
vector<int> stringToVector(string s) {
25+
vector<int> res;
26+
int n = s.size();
27+
int i = 0;
28+
string tmp = "";
29+
30+
while(i < n) {
31+
32+
while(i < n && s[i] != delimiter) {
33+
tmp += s[i];
34+
i++;
35+
}
36+
37+
res.push_back(stoi(tmp));
38+
tmp.erase();
39+
i++;
40+
}
41+
42+
return res;
43+
}
44+
45+
TreeNode* createBST(vector<int> nums, int start, int end) {
46+
if(start > end) return NULL;
47+
48+
TreeNode* root = new TreeNode(nums[start]);
49+
50+
int index;
51+
52+
for(index = start; index <= end; ++index) {
53+
if(nums[index] > nums[start]) break;
54+
}
55+
56+
root->left = createBST(nums, start + 1, index - 1);
57+
root->right = createBST(nums, index, end);
58+
59+
return root;
60+
}
61+
public:
62+
63+
// Encodes a tree to a single string.
64+
string serialize(TreeNode* root) {
65+
if(root == NULL) return "";
66+
string s = "";
67+
dfs(root, s);
68+
return s;
69+
}
70+
71+
// Decodes your encoded data to tree.
72+
TreeNode* deserialize(string data) {
73+
if(data == "") return NULL;
74+
vector<int> nums = stringToVector(data);
75+
76+
return createBST(nums, 0, nums.size() - 1);
77+
}
78+
};
79+
80+
// Your Codec object will be instantiated and called as such:
81+
// Codec* ser = new Codec();
82+
// Codec* deser = new Codec();
83+
// string tree = ser->serialize(root);
84+
// TreeNode* ans = deser->deserialize(tree);
85+
// return ans;

0 commit comments

Comments
 (0)