[LeetCode] Serialize and Deserialize Binary Tree
2015-11-04 12:35
387 查看
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
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
Java:
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.
解题思路
先序遍历+递归。实现代码
C++:// Runtime: 140 ms /** * 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 res = ""; serializeHelper(root, res); return res; } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { TreeNode *root = NULL; deserializeHelper(root, data); return root; } private: void serializeHelper(TreeNode *root, string &res) { if (root == NULL) { res += "null "; return; } ostringstream oss; oss<<root->val; res += oss.str(); res += ' '; serializeHelper(root->left, res); serializeHelper(root->right, res); } void deserializeHelper(TreeNode *&root, string& data) { if (data.length() == 0) { return; } string temp = data.substr(0, data.find(' ')); data = data.substr(data.find(' ') + 1); if (temp.compare("null") == 0) { root = NULL; } else { root = new TreeNode(atoi(temp.c_str())); deserializeHelper(root->left, data); deserializeHelper(root->right, data); } } }; // Your Codec object will be instantiated and called as such: // Codec codec; // codec.deserialize(codec.serialize(root));
Java:
// Runtime: 446 ms /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); return serialize(root, sb); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { StringBuilder sb = new StringBuilder(data); TreeNode root = null; return deserialize(root, sb); } private String serialize(TreeNode root, StringBuilder sb) { if (root == null) { sb.append("null "); } else { sb.append(root.val + " "); serialize(root.left, sb); serialize(root.right, sb); } return sb.toString(); } private TreeNode deserialize(TreeNode root, StringBuilder sb) { if (sb.length() == 0) { return null; } String temp = sb.substring(0, sb.indexOf(" ")); sb = sb.delete(0, sb.indexOf(" ") + 1); if (temp.equals("null")) { root = null; } else { root = new TreeNode(Integer.parseInt(temp)); root.left = deserialize(root.left, sb); root.right = deserialize(root.right, sb); } return root; } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root));
相关文章推荐
- Error:No such property: nexusUsername for class
- Metal Shader Compiler Options
- Mac--键盘输入的技巧
- don't touch your phone in any unfamiliar way(转)
- Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
- jquery滚动到指定元素,模仿锚点
- Android硬件抽象层(HAL)概要介绍和学习计划
- brew-cask 之本地更新 node
- jQuery过滤器
- ubuntu远程桌面连接windows系统
- 1010. Radix (25)
- Mac OS X 10.11安装cocoa pods失败的解决方案
- HTTP_CONNECTION:Keep-Alive
- ADB学习
- Tomcat中session的管理机制
- 1010. Radix (25)
- 线程池
- 网络安全形势复杂,专利积累成第一要务
- java中关于文本文件的读写方法实例总结
- 你真的会玩SQL吗?Case的用法(转)