File tree Expand file tree Collapse file tree
serialize-and-deserialize-binary-tree Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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))
You can’t perform that action at this time.
0 commit comments