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