LeetCode/주제별 보충

Tree: 297. Serialize and Deserialize Binary Tree

hyunkookim 2025. 1. 16. 21:53

297. Serialize and Deserialize Binary Tree

 

# bfs(큐) 또는 dfs(preorder 순회: 나-좌-우)
# null 대신 N 으로
 
DFS: preorder 가 더 쉽게 구현 가능

 

https://youtu.be/u4JAi2JJhI8

 

# 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
        """
        res = []

        def dfs(node):
            if not node:
                res.append("N")
                return
            
            res.append(str(node.val))
            dfs(node.left)
            dfs(node.right)

        dfs(root)
        return ",".join(res) # 각 element 마다 , 로 구분줘서 string 으로 변경
        

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        vals = data.split(",")
        self.i = 0

        def dfs():
            if vals[self.i] == "N": # base case
                self.i +=1
                return None

            node = TreeNode(int(vals[self.i]))
            self.i +=1
            node.left = dfs() # dfs 콜하면, 내부적으로 self.i 증가
            node.right = dfs()
            return node

        return dfs()            

        

# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))