https://leetcode.com/problems/serialize-and-deserialize-binary-tree/
class Codec:
def serialize(self, root):
result = ['#']
q = deque([root])
while q:
node = q.popleft()
if node:
q.append(node.left)
q.append(node.right)
result.append(str(node.val))
else:
result.append('#')
return ' '.join(result)
def deserialize(self, data):
if data == '# #':
return None
nodes = data.split()
root = TreeNode(int(nodes[1]))
q = deque([root])
index = 2
while q:
node = q.popleft()
if nodes[index] is not '#':
node.left = TreeNode(int(nodes[index]))
q.append(node.left)
index += 1
if nodes[index] is not '#':
node.right = TreeNode(int(nodes[index]))
q.append(node.right)
index += 1
return root
트리의 배열 표현은 배열의 인덱스가 1부터 시작한다. 0부터 시작할 경우 자식 노드를 찾는 2i
와 2i+1
를 사용할 수 없다.
역직렬화 코드에서 자식 노드를 찾을 때 2i
와 2i+1
을 사용하는게 아니라 단순히 index += 1
코드를 두 번 나눠서 사용하여 한 칸 씩 탐색하는 방식도 좋은 것 같다.