题目描述
思路分析
二叉树的遍历相关
带有空的前序遍历可以唯一确定二叉树。因此这里我们按照前序遍历序列化。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Codec {
public:
// Encodes a tree to a single string.
string res;
string serialize(TreeNode* root) {
dfs_s(root);
return res;
}
void dfs_s(TreeNode* u){
if(!u){
res+="#,";
return;
}
res+=to_string(u->val)+",";
dfs_s(u->left);
dfs_s(u->right);
}
// 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(data[u]=='#') {
u+=2;
return NULL;
}
int k=u;
while(data[u]!=',') u++;
auto node=new TreeNode(stoi(data.substr(k,u-k)));
u++;
node->left=dfs_d(data,u);
node->right=dfs_d(data,u);
return node;
}
};
// Your Codec object will be instantiated and called as such:
// Codec ser, deser;
// TreeNode* ans = deser.deserialize(ser.serialize(root));