题解 | #序列化二叉树#
序列化二叉树
http://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
要点:
- 序列化成“根左根右”,利用根的位置区分开左右子树,这样反序列化的时候就非常方便
- 每个节点的值用()包裹,以防数值不止一位
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Serialize(self, root):
# write code here
if not root:
return "(#)"
s_root = "(" + str(root.val) + ")"
s_left = self.Serialize(root.left)
s_right = self.Serialize(root.right)
s = s_root + s_left + s_root + s_right
return s
def Deserialize(self, s):
# write code here
if s == "(#)":
return None
root = s.split(")")[0] + ")"
s = s.replace(root, " ")
left = s.split()[0]
right = s.split()[1]
tree = TreeNode(int(root[1:-1]))
tree.left = self.Deserialize(left)
tree.right = self.Deserialize(right)
return tree