Leetcode192: Serialize and Deserialize Binary Tree
2015-12-10 16:27
302 查看
Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized
to the original tree structure.
For example, you may serialize the following tree
as
just the same as how LeetCode OJ serializes
a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized
to the original tree structure.
For example, you may serialize the following tree
1 / \ 2 3 / \ 4 5
as
"[1,2,3,null,null,4,5]",
just the same as how LeetCode OJ serializes
a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
/** * 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 serialize(TreeNode* root) { string result; traverse(root, result); return result; } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { int start = 0; return helper(data, start); } private: void traverse(TreeNode* root, string& result) { if(result.size() != 0) { result.push_back(','); } if(root == NULL) { result += "NULL"; return; } result += to_string(root -> val); traverse(root -> left, result); traverse(root -> right, result); } TreeNode* helper(string data, int& start) { if(start >= data.size()) { return NULL; } int index = data.find_first_of(',', start); if(index == string::npos) { index = data.size(); } string tmp = data.substr(start, index - start); start = index + 1; if(tmp == "NULL") { return NULL; } TreeNode* root = new TreeNode(stoi(tmp)); root -> left = helper(data, start); root -> right = helper(data, start); return root; } }; // Your Codec object will be instantiated and called as such: // Codec codec; // codec.deserialize(codec.serialize(root));
相关文章推荐
- Hibernate操作数据库的方式总结
- Android之单选框、复选框警告框
- Java学习----数组
- Diet
- node开发环境搭建(windows)
- SQL Case when 的使用
- 数据集可视化——tile("贴砖")
- 数据库连接客户端使用(db2,oracle,mysql)
- nginx服务器部署SSL证书
- Gson与Hibernate结合使用会出现的问题
- HDU 1754 区间最大值 (线段树)
- SSE(Server-Send Event):服务器推送数据的新方式
- iOS 学习日志:调用相机拍照获得图片旋转问题
- Java IO流详解
- pc上的hosts 移植到 android上
- CentOS 安装 MRTG 软件完成后的 403 Forbidden(转载)
- SaltStack管理从这里开始
- [MD学习]使用ActionBar+DrawableLayout+Palette打造侧滑UI
- Android 异步加载图片,使用LruCache和SD卡或手机缓存(使用线程池下载图片)
- 信息安全与密码学5-RSA算法的介绍