力扣练习之二叉树的序列化与反序列化

我爱海鲸 2023-04-22 15:24:58 力扣、中级算法

简介中级算法、设计问题

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xwxa3m/

解法一

# 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 preorder(root):
            if not root:
                res.append('n')
                return
            res.append(str(root.val))
            preorder(root.left)
            preorder(root.right)
        preorder(root)
        return ','.join(res)
        

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        arr = data.split(',')
        arr.reverse()
        def preorder(arr):
            if not arr:return
            if arr[-1] == 'n':
                arr.pop()
                return
            root = TreeNode(int(arr.pop()))
            root.left = preorder(arr)
            root.right = preorder(arr)
            return root
        return preorder(arr)
        

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

思路:递归前序遍历即可。

你好:我的2025