• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2014>
博客园    首页    新随笔    联系   管理    订阅  订阅
6.16

每日一题:二叉树的序列化与反序列化 https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/

class Codec:

    def serialize(self, root):
        """Encodes a tree to a single string.

        :type root: TreeNode
        :rtype: str
        """
        res = ''
        if not root:
            return res
        node_pool = [root]
        res = str(root.val)
        while node_pool:
            tmp = []
            for node in node_pool:
                if not node.left:
                    res += ',' + 'null'
                else:
                    res += ',' + str(node.left.val)
                    tmp.append(node.left)
                if not node.right:
                    res += ',' + 'null'
                else:
                    res += ',' + str(node.right.val)
                    tmp.append(node.right)
            node_pool = tmp
        print(res)
        return res

    def deserialize(self, data):
        if not data:
            return None
        str_set = data.split(',')
        res = TreeNode(int(str_set[0]))
        node_pool = [res]
        ptr = 1
        nums = 2
        while ptr < len(str_set):
            child_pool = []
            child_set = str_set[ptr:ptr + nums]
            for i, node in enumerate(node_pool):
                if child_set[2 * i] != 'null':
                    node.left = TreeNode(int(child_set[2 * i]))
                    child_pool.append(node.left)
                if child_set[2 * i + 1] != 'null':
                    node.right = TreeNode(int(child_set[2 * i + 1]))
                    child_pool.append(node.right)
            ptr += nums
            nums = 2 * len(child_pool)
            node_pool = child_pool
        return res

  

posted on 2020-06-16 22:03  2014>  阅读(97)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3