您的位置:首页 > Web前端

剑指offer 编程题(58):序列化二叉树

2017-12-31 17:17 387 查看
请实现两个函数,分别用来序列化和反序列化二叉树

class Solution {
public:
string str;
string serializeHelper(TreeNode *root)
{//按先序DFS序列化
if(root==NULL){
str+="#,";
return str;
}
str+=to_string(root->val);
str+=',';
serializeHelper(root->left);
serializeHelper(root->right);
return str;
}
TreeNode* deserializeHelper(string &str){//反序列化
if(str.empty())return NULL;
if(str[0]=='#'){//当前字符对应空结点,跳过
str=str.substr(2);//跳过当前'#'和','开始截取
return NULL;//返回空子树
}
TreeNode *pRoot=new TreeNode(stoi(str));//stoi:string转int,后面出现逗号被截断,只转换当前数字字符
str=str.substr(str.find_first_of(',')+1);//跳过下一个逗号截取
pRoot->left=deserializeHelper(str);//重建左子树
pRoot->right=deserializeHelper(str);//重建右子树
return pRoot;
}

char* Serialize(TreeNode *root) {
if(root==NULL)return NULL;

str = serializeHelper(root);
char* r=new char[str.size()+1];
strcpy(r,str.c_str());
return r;
}
TreeNode* Deserialize(char *str) {
if(str==NULL)return NULL;
string s(str);
return deserializeHelper(s);
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: