297. 二叉树的序列化与反序列化
题目描述
解题思路
- 序列化
前序遍历法想法:左右子树均序列化好,那直接拿当前节点的值和左右子树序列化好的值组装返回即可。 - 反序列化
因为序列化是前序遍历,因此按照分隔符分割后,第一个节点为根节点,可以使用list的pop()方法,这样list就是动态变动的。
代码实现
# 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 not root:
return "#"
left = self.serialize(root.left)
right = self.serialize(root.right)
return ",".join([str(root.val), left, right])
def deserialize(self, data):
"""
"""
nodes = data.split(",")
def build(nodes: List[str]) -> TreeNode:
node = nodes.pop(0)
if node == "#":
return
root = TreeNode(node)
root.left = build(nodes)
root.right = build(nodes)
return root
return build(nodes)
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))