二叉树的序列化和反序列化
2016-04-08 14:43
351 查看
开始感觉有点难
主要是要运用递归的方式
采用先序列遍历来序列化节点
注意要delete掉中间内存
主要是要运用递归的方式
采用先序列遍历来序列化节点
注意要delete掉中间内存
class Solution { public: char * Str2Char( string str){ char * rt_ptr = new char[str.length() + 1]; rt_ptr [str.length()] = '\0'; memcpy(rt_ptr , str.c_str() , str.length()); return rt_ptr; } char* Serialize(TreeNode *root) { string rt_str ; if(root == NULL){ rt_str = "$,"; return Str2Char(rt_str); } else { rt_str = to_string(root->val); rt_str+=","; } char * left = Serialize(root->left); char *right = Serialize(root->right); string left_str(left); string right_str(right); delete []left ; delete []right; rt_str += left_str; rt_str += right_str; return Str2Char(rt_str); } TreeNode * DeserializeFromString(string &str_ref){ size_t pos = str_ref.find_first_of(","); string tmp = str_ref.substr(0,pos); str_ref = str_ref.substr(pos+1 , str_ref.length() - pos - 1); if(tmp == "$"){ return NULL; }else { TreeNode * rt_ptr = new TreeNode(atoi(tmp.c_str())); rt_ptr-> left = DeserializeFromString(str_ref); rt_ptr-> right = DeserializeFromString(str_ref); return rt_ptr; } } TreeNode* Deserialize(char *str) { if(str == NULL) return NULL; string input_str(str); return DeserializeFromString(input_str); } };class Solution { public: char * Str2Char( string str){ char * rt_ptr = new char[str.length() + 1]; rt_ptr [str.length()] = '\0'; memcpy(rt_ptr , str.c_str() , str.length()); return rt_ptr; } char* Serialize(TreeNode *root) { string rt_str ; if(root == NULL){ rt_str = "$,"; return Str2Char(rt_str); } else { rt_str = to_string(root->val); rt_str+=","; } char * left = Serialize(root->left); char *right = Serialize(root->right); string left_str(left); string right_str(right); delete []left ; delete []right; rt_str += left_str; rt_str += right_str; return Str2Char(rt_str); } TreeNode * DeserializeFromString(string &str_ref){ size_t pos = str_ref.find_first_of(","); string tmp = str_ref.substr(0,pos); str_ref = str_ref.substr(pos+1 , str_ref.length() - pos - 1); if(tmp == "$"){ return NULL; }else { TreeNode * rt_ptr = new TreeNode(atoi(tmp.c_str())); rt_ptr-> left = DeserializeFromString(str_ref); rt_ptr-> right = DeserializeFromString(str_ref); return rt_ptr; } } TreeNode* Deserialize(char *str) { if(str == NULL) return NULL; string input_str(str); return DeserializeFromString(input_str); } };
相关文章推荐
- 团队介绍
- Inputstream转换成String
- Bootstrap模态框 及 判断选中checkbox的个数
- /etc/motd与/etc/issue的区别
- C语言指针学习笔记
- 容易被忽略CSS特性
- android 设置屏幕方向
- Git 忽略一些文件不加入版本控制
- 解决ctags只能在根目录下跳转
- Android应用小米真机调试方法
- Hadoop家族各个产品功能
- Python快速入门
- webview chromium v35网页加载触发时机
- lua中的table的应用
- Oracle建立用户
- Lua语法基础(2)--基本语法、函数
- TableView---header悬停问题
- ubuntu14.04下安装openMPI
- linux环境变量
- 关于RxJava的from()和 flatMap()方法