[리트코드] 297. Serialize and Deserialize Binary Tree

박형진·2022년 7월 31일
0

https://leetcode.com/problems/serialize-and-deserialize-binary-tree/


1. 코드

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

2. 후기

트리의 배열 표현은 배열의 인덱스가 1부터 시작한다. 0부터 시작할 경우 자식 노드를 찾는 2i2i+1를 사용할 수 없다.

역직렬화 코드에서 자식 노드를 찾을 때 2i2i+1을 사용하는게 아니라 단순히 index += 1코드를 두 번 나눠서 사용하여 한 칸 씩 탐색하는 방식도 좋은 것 같다.

profile
안녕하세요!

0개의 댓글