首页 > 其他 > 详细

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

时间:2020-06-16 23:22:47      阅读:102      评论:0      收藏:0      [点我收藏+]

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

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

原文:https://www.cnblogs.com/enmac/p/13149814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!