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