File tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed
serialize-and-deserialize-binary-tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change
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
+ # DFS
10
+
11
+ # 이진트리 -> 문자열 변환(직렬화)
12
+ # 시간복잡도 O(n), 공간복잡도 O(n)
13
+ def serialize (self , root ):
14
+ """Encodes a tree to a single string.
15
+
16
+ :type root: TreeNode
17
+ :rtype: str
18
+ """
19
+ if not root :
20
+ return 'null'
21
+
22
+ # 재귀 호출로 노드값을 문자열로 저장
23
+ return str (root .val ) + ',' + self .serialize (root .left ) + ',' + self .serialize (root .right )
24
+
25
+
26
+ # 문자열 -> 이진트리 변환(역직렬화)
27
+ # 시간복잡도 O(n), 공간복잡도 O(n)
28
+ def deserialize (self , data ):
29
+ """Decodes your encoded data to tree.
30
+
31
+ :type data: str
32
+ :rtype: TreeNode
33
+ """
34
+ # ','를 기준으로 끊어서 리스트로 변환
35
+ s = data .split (',' )
36
+
37
+ def dfs ():
38
+ # 맨 앞부터 꺼내기
39
+ val = s .pop (0 )
40
+
41
+ # null이면 자식 노드 없음
42
+ if val == 'null' :
43
+ return None
44
+
45
+ node = TreeNode (int (val )) # 현재 노드
46
+ node .left = dfs () # 왼쪽 서브트리
47
+ node .right = dfs () # 오른쪽 서브트리
48
+
49
+ return node
50
+
51
+ return dfs ()
52
+
53
+
54
+
55
+ # Your Codec object will be instantiated and called as such:
56
+ # ser = Codec()
57
+ # deser = Codec()
58
+ # ans = deser.deserialize(ser.serialize(root))
You can’t perform that action at this time.
0 commit comments