Skip to content

Commit 01589e6

Browse files
committedNov 8, 2020
feat: serialize-and-deserialize-binary-tree
1 parent 606c7e8 commit 01589e6

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed
 

Diff for: ‎recs.serialize-and-deserialize-binary-tree.py

+44-29
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import deque
12

23
class TreeNode(object):
34
def __init__(self, x):
@@ -12,40 +13,54 @@ class Codec:
1213
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
1314
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
1415
"""
16+
# 广度优先
1517
def serialize(self, root):
16-
"""Encodes a tree to a single string.
18+
queue = [root]
19+
res = []
1720

18-
:type root: TreeNode
19-
:rtype: str
20-
"""
21-
if not root:
22-
return 'null,'
23-
24-
left = self.serialize(root.left)
25-
right = self.serialize(root.right)
26-
return str(root.val) + ',' + left + right
21+
while queue:
22+
node = queue.pop(0)
23+
if node:
24+
print(node.val)
25+
res.append(str(node.val))
26+
queue.append(node.left)
27+
queue.append(node.right)
28+
else:
29+
print('null')
30+
res.append('null')
2731

32+
return ','.join(res)
2833

2934
def deserialize(self, data):
30-
"""Decodes your encoded data to tree.
31-
32-
:type data: str
33-
:rtype: TreeNode
34-
"""
35-
l = data.split(',')
36-
return self.build_tree(l)
37-
38-
def build_tree(self, data):
39-
if not data:
40-
return
41-
val = data.pop(0)
42-
if val == 'null': return None
43-
node = TreeNode(val)
44-
node.left = self.build_tree(data)
45-
node.right = self.build_tree(data)
46-
return node
35+
if data == 'null':
36+
return None
4737

48-
so = Codec()
38+
l = data.split(",")
39+
root = TreeNode(l[0])
40+
queue = [root]
41+
cursor = 1
42+
43+
while cursor < len(l):
44+
node = queue.pop(0)
45+
left_val = l[cursor]
46+
right_val = l[cursor + 1]
47+
48+
if left_val != 'null':
49+
left_node = TreeNode(left_val)
50+
node.left = left_node
51+
queue.append(left_node)
52+
53+
if right_val != 'null':
54+
right_node = TreeNode(right_val)
55+
node.right = right_node
56+
queue.append(right_node)
4957

50-
print(so.serialize(so.deserialize('1,2,3,null,null,4,5')))
58+
cursor += 2
59+
60+
return root
61+
62+
63+
so = Codec()
64+
print(so.serialize(so.deserialize('1,2,3,null,null,4,5,null,null,null,null')))
5165

66+
print([1, 2, 3,].pop(0))

0 commit comments

Comments
 (0)
Please sign in to comment.