Skip to content

Commit 1f57522

Browse files
committed
serialize-and-deserialize-binary-tree solution
1 parent b86f31e commit 1f57522

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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))

0 commit comments

Comments
 (0)