-
Notifications
You must be signed in to change notification settings - Fork 6
/
0297.cpp
80 lines (58 loc) · 1.75 KB
/
0297.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string s;
s.clear();
if(!root)
return s;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* frnt = q.front();
q.pop();
if(!frnt)
s.append("#,");
else
s.append(to_string(frnt -> val) + ',');
if(frnt){
q.push(frnt -> left);
q.push(frnt -> right);
}
}
return s;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if(data.size() == 0)
return NULL;
stringstream s(data);
string str;
str.clear();
getline(s, str, ',');
TreeNode* root = new TreeNode(stoi(str));
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* frnt = q.front();
q.pop();
getline(s, str, ',');
if(str == "#")
frnt -> left = NULL;
else{
TreeNode* temp = new TreeNode(stoi(str));
frnt -> left = temp;
q.push(temp);
}
getline(s, str, ',');
if(str == "#")
frnt -> right = NULL;
else{
TreeNode* temp = new TreeNode(stoi(str));
frnt -> right = temp;
q.push(temp);
}
}
return root;
}
};