1.关键就是序列的格式:因为是返回字符串,那么怎么保证1.节点的值可以很方便的找到。2.节点的左右孩子可以很方便的找到
/**
* 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 singlestring.
string serialize(TreeNode* root) {
if(root==NULL) return "";
return to_string(root->val) +"["+serialize(root->left)+ "," + serialize(root->right)+"]";
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
stack<TreeNode*> s;
TreeNode* root=NULL;
string val;
for(int i=0;i<data.size();i++){
char t=data[i];
if(t>='0'&&t<='9'||t=='-'){
val+=t;
}
if(t=='['||(t==','&&data[i-1]=='[')||(t==']'&&data[i-1]==',')){
TreeNode* node=NULL;
if(!val.empty()) node=new TreeNode(stoi(val));
if(root==NULL) root=node;
val.clear();
s.push(node);
}
if(t==','||t==']'){
TreeNode* tp=s.top();
s.pop();
TreeNode* tmp=s.top();
if(t==',') tmp->left=tp;
else tmp->right=tp;
}
}
return root;
}
};
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));