1、題目描述
請實(shí)現(xiàn)兩個(gè)函數(shù),分別用來序列化和反序列化二叉樹。
您需要確保二叉樹可以序列化為字符串,并且可以將此字符串反序列化為原始樹結(jié)構(gòu)。
樣例
你可以序列化如下的二叉樹
??8
? / \
12 2
??? / \
??6 ? 4
為:"[8, 12, 2, null, null, 6, 4, null, null, null, null]"
2、問題描述:
序列化二叉樹和反序列化。
3、問題關(guān)鍵:
前序中序后序,層次都可以。
4、C++代碼:
class Solution {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res;
dfs_s(root, res);
return res;
}
void dfs_s(TreeNode* root, string &res) {
if (!root) {
res += "null ";
return;
}
res += to_string(root->val) + ' ';
dfs_s(root->left, res);
dfs_s(root->right, res);
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
int u = 0;
return dfs_d(data, u);
}
TreeNode* dfs_d(string data, int &u) {
if (u == data.size()) return NULL;
int k = u;
while(data[k] != ' ') k ++;
if (data[u] == 'n') {
u = k + 1;
return NULL;
}
int sum = 0;
for (int i = u; i < k; i ++) {
sum = sum * 10 + data[i] - '0';
}
u = k + 1;
auto root = new TreeNode(sum);
root->left = dfs_d(data, u);
root->right = dfs_d(data, u);
return root;
}
};