Skip to content

Commit dda530f

Browse files
authored
Create 297-serialize-and-deserialize.py
1 parent 1e97a93 commit dda530f

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

297-serialize-and-deserialize.py

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Codec:
9+
10+
def serialize(self, root):
11+
"""Encodes a tree to a single string.
12+
13+
:type root: TreeNode
14+
:rtype: str
15+
"""
16+
if root == None:
17+
return []
18+
19+
queue = deque()
20+
queue.append(root)
21+
result = []
22+
23+
while queue:
24+
item = queue.popleft()
25+
26+
if item:
27+
result.append(item.val)
28+
queue.append(item.left)
29+
queue.append(item.right)
30+
31+
else:
32+
result.append("null")
33+
34+
print(result)
35+
return result
36+
37+
38+
39+
def deserialize(self, data):
40+
"""Decodes your encoded data to tree.
41+
42+
:type data: str
43+
:rtype: TreeNode
44+
"""
45+
self.elem_ptr = 0
46+
def get_next_elem():
47+
# if self.elem_ptr < len(data) - 1:
48+
self.elem_ptr += 1
49+
return data[self.elem_ptr]
50+
51+
if len(data) == 0:
52+
return
53+
54+
root = TreeNode(data[0])
55+
56+
queue = deque()
57+
queue.append(root)
58+
59+
while queue and self.elem_ptr < len(data) - 1:
60+
item = queue.popleft()
61+
print(item.val)
62+
63+
if item: #item exists, so add its children (even if they are null)
64+
#add its left child
65+
item.left = TreeNode(get_next_elem())
66+
67+
#add its right child
68+
item.right = TreeNode(get_next_elem())
69+
70+
queue.append(item.left)
71+
queue.append(item.right)
72+
73+
else: #item doesn't exist, so no need to children; advance elem_ptr
74+
get_next_elem()
75+
get_next_elem()
76+
77+
return root
78+
79+
80+
81+
82+
# Your Codec object will be instantiated and called as such:
83+
# codec = Codec()
84+
# codec.deserialize(codec.serialize(root))

0 commit comments

Comments
 (0)