请实现两个函数,分别用来序列化和反序列化二叉树。
把树分为3部分:根节点、左子树和右子树,在序列化/反序列化根节点之后再分别序列化/反序列化左、右子树,因此可以递归解决。
class Solution:
def __init__(self):
self._values = None
self._index = -1
def serialize(self, root):
self.pre_write_value(root)
return ''.join(self._values)
def pre_write_value(self, root):
if not root:
if self._values is None:
self._values = []
self._values.append('$,')
return
if self._values is None:
self._values = []
self._values.append(str(root.val)+',')
self.pre_write_value(root.left)
self.pre_write_value(root.right)
def deserialize(self, s):
self._index += 1
values = s.split(',')[:-1]
if self._index > len(values)-1:
return None
root = None
if values[self._index] != '$':
root = TreeNode(int(values[self._index]))
root.left = self.deserialize(s)
root.right = self.deserialize(s)
return root
(最近更新:2019年07月24日)