Skip to content

Commit 72b154e

Browse files
committed
add a solution
1 parent e475efe commit 72b154e

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

Python/serialize-and-deserialize-binary-tree.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,44 @@ def isplit(source, sep):
5656
return deserializeHelper()
5757

5858

59+
# time: O(n)
60+
# space: O(n)
61+
62+
class Codec2(object):
63+
64+
def serialize(self, root):
65+
"""Encodes a tree to a single string.
66+
67+
:type root: TreeNode
68+
:rtype: str
69+
"""
70+
def gen_preorder(node):
71+
if not node:
72+
yield '#'
73+
else:
74+
yield str(node.val)
75+
for n in gen_preorder(node.left):
76+
yield n
77+
for n in gen_preorder(node.right):
78+
yield n
79+
80+
return ' '.join(gen_preorder(root))
81+
82+
def deserialize(self, data):
83+
"""Decodes your encoded data to tree.
84+
85+
:type data: str
86+
:rtype: TreeNode
87+
"""
88+
def builder(chunk_iter):
89+
val = next(chunk_iter)
90+
if val == '#':
91+
return None
92+
node = TreeNode(int(val))
93+
node.left = builder(chunk_iter)
94+
node.right = builder(chunk_iter)
95+
return node
96+
97+
# https://stackoverflow.com/a/42373311/568901
98+
chunk_iter = iter(data.split())
99+
return builder(chunk_iter)

0 commit comments

Comments
 (0)