File tree Expand file tree Collapse file tree 1 file changed +65
-0
lines changed
serialize-and-deserialize-binary-tree Expand file tree Collapse file tree 1 file changed +65
-0
lines changed Original file line number Diff line number Diff line change 1+ from typing import Optional
2+
3+
4+ # Definition for a binary tree node.
5+ class TreeNode :
6+ def __init__ (self , val = 0 , left = None , right = None ):
7+ self .val = val
8+ self .left = left
9+ self .right = right
10+
11+
12+ class Codec :
13+ """
14+ Runtime: 76 ms (Beats 85.72%)
15+ Time Complexity: O(n)
16+ > dfs를 통해 모든 node를 방문하므로, O(n)
17+
18+ Memory: 21.40 MB (Beats 12.82%)
19+ Space Complexity: O(n)
20+ > 일반적인 경우 트리의 깊이만큼 dfs 호출 스택이 쌓이나, 최악의 경우 한쪽으로 편향되었다면 트리의 깊이가 n이 될 수 있으므로 O(n), upper bound
21+ """
22+
23+ def serialize (self , root ):
24+ """Encodes a tree to a single string.
25+
26+ :type root: TreeNode
27+ :rtype: str
28+ """
29+
30+ def dfs (node : Optional [TreeNode ]) -> None :
31+ if node is None :
32+ result .append ("null" )
33+ return
34+ result .append (str (node .val ))
35+ dfs (node .left )
36+ dfs (node .right )
37+
38+ result = []
39+ dfs (root )
40+ return ',' .join (result )
41+
42+ def deserialize (self , data ):
43+ """Decodes your encoded data to tree.
44+
45+ :type data: str
46+ :rtype: TreeNode
47+ """
48+
49+ def dfs () -> Optional [TreeNode ]:
50+ val = next (values )
51+ if val == "null" :
52+ return None
53+ node = TreeNode (int (val ))
54+ node .left = dfs ()
55+ node .right = dfs ()
56+ return node
57+
58+ values = iter (data .split (',' ))
59+ return dfs ()
60+
61+
62+ # Your Codec object will be instantiated and called as such:
63+ # ser = Codec()
64+ # deser = Codec()
65+ # ans = deser.deserialize(ser.serialize(root))
You can’t perform that action at this time.
0 commit comments