'파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀
문제 👉 <Serialize and Deserialize Binary Tree - LeetCode>
1. 문제 (이진 트리 직렬화 & 역직렬화)
이진 트리를 배열로 직렬화하고, 반대로 역직렬화하는 기능을 구현하라.
다음과 같은 트리는 [1, 2, 3, null, null, 4, 5] 형태로 직렬화할 수 있다.
2. 풀이
BFS
를 이용한 풀이
3. 코드
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Codec:
def serialize(self, root):
"""Encodes a tree to a single string.
:type root: TreeNode
:rtype: str
"""
q = collections.deque([root])
result = []
while q:
node = q.popleft()
if node:
q.append(node.left)
q.append(node.right)
result.append(str(node.val))
else:
result.append('#') # null을 '#'으로 표현
return ' '.join(result)
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
if data == '#': return None
nodes = data.split()
root = TreeNode(int(nodes[0]))
q = collections.deque([root])
idx = 1
while q:
node = q.popleft()
if nodes[idx] != '#':
node.left = TreeNode(int(nodes[idx]))
q.append(node.left)
idx += 1
if nodes[idx] != '#':
node.right = TreeNode(int(nodes[idx]))
q.append(node.right)
idx += 1
return root
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))
- 결과 :
방식 | Status | Runtime | Memory | Language |
---|---|---|---|---|
BFS | [Accepted] | 221 ms | 18.8 MB | python3 |
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > LeetCode' 카테고리의 다른 글
[LeetCode] 617. Merge Two Binary Trees [Python(파이썬)] (0) | 2021.11.24 |
---|---|
[LeetCode] 226. Invert Binary Tree [Python(파이썬)] (0) | 2021.11.24 |
[LeetCode] 543. Diameter of Binary Tree [Python(파이썬)] (1) | 2021.11.24 |
댓글