leetcode 297. 二叉树的序列化与反序列化

思路

前序遍历 序列化 二叉树 为 字符串
前序遍历 反序列化 字符串 为 二叉树
注意叶子节点的处理

时间复杂度

O(n) n为节点数

空间复杂度

O(n) n为节点数

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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):
"""Encodes a tree to a single string.

:type root: TreeNode
:rtype: str
"""
if not root:
return 'None'
return f'{root.val},{self.serialize(root.left)},{self.serialize(root.right)}'


def deserialize(self, data):
"""Decodes your encoded data to tree.

:type data: str
:rtype: TreeNode
"""
def build_tree(node_list):
if not node_list:
return

node = node_list.pop(0)
if node == 'None':
return

root = TreeNode(node)
root.left = build_tree(node_list)
root.right = build_tree(node_list)
return root

return build_tree(data.split(','))


# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))