牛客网__剑指offer__序列化二叉树__python

本文介绍了一种使用广度有限搜索思想实现的二叉树序列化与反序列化方法。通过将二叉树转换为字符串,再从字符串还原为二叉树,实现了树结构的有效存储和读取。代码示例展示了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体思路用到了广度有限搜索的思想,然后对None节点特殊处理一下即可,具体的代码如下:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Serialize(self, root):
        # write code here
        res = ''
        if not root:
            return res
        tmp = [root]
        while tmp:
            _tmp = []
            for node in tmp:
                if node:
                    _tmp.append(node.left)
                    _tmp.append(node.right)
                    res += str(node.val) + ','
                else:
                    res += '#' + ','
            tmp = _tmp
        if res[-1] == ',':
            res = res[:-1]
        return res
        
    def Deserialize(self, s):
        # write code here
        if not s:
            return
        val_list = s.split(',')
        root = TreeNode(int(val_list[0]))
        ptr = 1
        node_list = [root]
        while len(node_list) != 0:
            val_tmp = val_list[ptr: ptr+len(node_list)*2]
            ptr += 2*len(node_list)
            node_tmp = []
            for idx, node in enumerate(node_list):
                if idx*2 < len(val_tmp) and val_tmp[2*idx] != '#':
                    node.left = TreeNode(int(val_tmp[2*idx]))
                    node_tmp.append(node.left)
                if idx*2 + 1 < len(val_tmp) and val_tmp[2*idx+1] != '#':
                    node.right = TreeNode(int(val_tmp[2*idx + 1]))
                    node_tmp.append(node.right)
            node_list = node_tmp
        return root
                
                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值