您的位置:首页 > 其它

lintcode:Binary Tree Serialization

2016-03-28 23:15 357 查看
Design an algorithm and write code to serialize and deserialize a binary tree. Writing the tree to a file is called ‘serialization’ and reading back from the file to reconstruct the exact same binary tree is ‘deserialization’.

There is no limit of how you deserialize or serialize a binary tree, you only need to make sure you can serialize a binary tree to a string and deserialize this string to the original structure.

/**
* Definition of TreeNode:
* class TreeNode {
* public:
*     int val;
*     TreeNode *left, *right;
*     TreeNode(int val) {
*         this->val = val;
*         this->left = this->right = NULL;
*     }
* }
*/
class Solution {
public:
/**
* This method will be invoked first, you should design your own algorithm
* to serialize a binary tree which denote by a root node to a string which
* can be easily deserialized by your own "deserialize" method later.
*/
void serializeHelper(TreeNode *node,string& res){
if(node){
res+=to_string(node->val)+" ";
}else{
res+="# ";
return;
}

serializeHelper(node->left,res);
/*
if(node->left){
serializeHelper(node->left,res);
}else{
res+="# ";
}*/

serializeHelper(node->right,res);
/*
if(node->right){
serializeHelper(node->right,res);
}else{
res+="# ";
}*/
}

string serialize(TreeNode *root) {
// write your code here

string res="";

serializeHelper(root,res);

return res;
}

/**
* This method will be invoked second, the argument data is what exactly
* you serialized at method "serialize", that means the data is not given by
* system, it's given by your own serialize method. So the format of data is
* designed by yourself, and deserialize it here as you serialize it in
* "serialize" method.
*/
TreeNode* deserializeHelper(istringstream& ss){
string str;
ss>>str;
if(str[0]=='#'){
return NULL;
}

int value=atoi(str.c_str());

TreeNode *node=new TreeNode(value);

node->left=deserializeHelper(ss);

node->right=deserializeHelper(ss);

return node;
}

TreeNode *deserialize(string data) {
// write your code here

istringstream ss(data);

TreeNode *root=deserializeHelper(ss);

return root;
}
};


参考:

/article/4999943.html

可以看到stringstream格式化字符串的强大功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: