Skip to content

Commit 3c6be3e

Browse files
committed
Week 12
1 parent a84de66 commit 3c6be3e

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from collections import deque
2+
3+
# Definition for a binary tree node.
4+
# class TreeNode(object):
5+
# def __init__(self, x):
6+
# self.val = x
7+
# self.left = None
8+
# self.right = None
9+
10+
class Codec:
11+
12+
def serialize(self, root):
13+
"""Encodes a tree to a single string.
14+
15+
:type root: TreeNode
16+
:rtype: str
17+
"""
18+
if not root:
19+
return ''
20+
nodes = []
21+
22+
q = deque([[root, 1]])
23+
24+
while q:
25+
node, idx = q.popleft()
26+
if not node:
27+
continue
28+
nodes.append(str(idx)+":"+str(node.val))
29+
q.append([node.left, idx*2])
30+
q.append([node.right, idx*2+1])
31+
32+
return '/'.join(nodes)
33+
34+
35+
36+
def deserialize(self, data):
37+
"""Decodes your encoded data to tree.
38+
39+
:type data: str
40+
:rtype: TreeNode
41+
"""
42+
if data == '':
43+
return None
44+
45+
data = data.split('/')
46+
47+
node_dict = {}
48+
49+
for chunk in data:
50+
idx, val = chunk.split(':')
51+
node_dict[int(idx)] = val
52+
53+
def dfs(idx):
54+
if idx in node_dict:
55+
node = TreeNode(int(node_dict[idx]))
56+
node.left = dfs(idx*2)
57+
node.right = dfs(idx*2+1)
58+
return node
59+
else:
60+
return None
61+
62+
return dfs(1)
63+
64+
65+
# Your Codec object will be instantiated and called as such:
66+
# ser = Codec()
67+
# deser = Codec()
68+
# ans = deser.deserialize(ser.serialize(root))

0 commit comments

Comments
 (0)