leetcode:Serialize and Deserialize Binary Tree
2016-02-05 22:26
288 查看
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
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. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Codec: def _serialize(self, root): if root == None: self.myList.append('x') else: self.myList.append(str(root.val)) self._serialize(root.left) self._serialize(root.right) def _deserialize(self, dList): if dList[self.idx] == 'x': return None node = TreeNode(dList[self.idx]) self.idx = self.idx+1 node.left = self._deserialize(dList) self.idx = self.idx+1 node.right = self._deserialize(dList) return node def serialize(self, root): """Encodes a tree to a single string. :type root: TreeNode :rtype: str """ self.myList = [] self._serialize(root) return " ".join(self.myList); return self.retString def deserialize(self, data): """Decodes your encoded data to tree. :type data: str :rtype: TreeNode """ self.idx = 0; dList = data.split(" ") return self._deserialize(dList) # Your Codec object will be instantiated and called as such: # codec = Codec() # codec.deserialize(codec.serialize(root))
相关文章推荐
- 数据结构(5)--栈的定义以及相关操作的实现
- linux服务器安全配置实例(三)用户账户权限配置
- poj2001 Shortest Prefixes (trie树)
- Linux下程序单例模式的保证机制:/var/run/*.pid
- 文本换行word-wrap、word-break与white-space
- 简易图解移轴镜头 (Tilt-Shift Lens) 原理 简易图解移轴镜头 (Tilt-Shift Lens) 原理
- Codeforces 577A Multiplication Table
- 并查集
- AIM Tech Round (Div. 2) D. Array GCD(dp)
- jQuery.extend函数详解--
- android MVC && MVP && MVVM分析和对比
- BZOJ2190 [SDOI2008]仪仗队(欧拉函数)
- USACO Canada Tour
- JQuery3(map,each,trim方法)
- 【LeetCode】9. Palindrome Number
- 深度实践嵌入式linux系统移植 光盘下载地址
- java提高篇(四)-----抽象类与接口
- #137 Single Number II
- junit4X系列--Exception
- junit4X系列--Exception