【LeetCode每日一题】2020.6.16 297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

示例:

你可以将以下二叉树:
1
/ \
2 3
/ \
4 5

序列化为 "[1,2,3,null,null,4,5]"

分析:

二叉树的DFS后序遍历。

代码(Python):

from collections import deque


# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Codec:

    def serialize(self, root: TreeNode):
        if not root:
            return "[]"
        queue = deque()
        queue.append(root)
        res = []
        while queue:
            node = queue.popleft()
            if not node:
                res.append('null')
            else:
                res.append(str(node.val))
                queue.append(node.left)
                queue.append(node.right)
        return '[' + ','.join(res) + ']'

    def deserialize(self, data: str):
        if data == "[]":
            return None
        # 分解为一个个结点值
        serial = data[1:-1].split(',')
        root = TreeNode(int(serial[0]))
        i = 1
        queue = deque()
        queue.append(root)
        while queue:
            node = queue.popleft()
            if serial[i] != "null":
                node.left = TreeNode(int(serial[i]))
                queue.append(node.left)
            i += 1
            if serial[i] != "null":
                node.right = TreeNode(int(serial[i]))
                queue.append(node.right)
            i += 1
        return root

posted @ 2020-06-16 23:10  macguz  阅读(150)  评论(0编辑  收藏  举报