【Leetcode刷题Python】297. 二叉树的序列化与反序列化
2023-09-14 09:13:02 时间
1 题目
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
输入:root = [1,2,3,null,null,4,5]
输出:[1,2,3,null,null,4,5]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
2 解析
题目讲得很复杂,其实序列化,就是将树结构转为字符串输出
反序列化,就是将字符串生成二叉树
3 Python实现
class Codec:
def serialize(self, root):
"""Encodes a tree to a single string.
:type root: TreeNode
:rtype: str
"""
def tree_to_str(r):
if r:
return str(r.val) + ',' + tree_to_str(r.left) + tree_to_str(r.right)
else:
return ','
return tree_to_str(root)
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
tree = data.split(',')[::-1]
def f():
val = tree.pop()
return TreeNode(val,f(),f()) if val else None
return f()
相关文章
- [python] 使用Jieba工具中文分词及文本聚类概念
- 【Python Oracle】使用cx_Oracle 连接oracle的简单介绍
- 【原创】研究Tribler过程中遇到的Python相关问题总结
- 小白学 Python 爬虫(22):解析库 Beautiful Soup(下)
- 使用Python循环插入10万数据
- python位运算符详细介绍
- Python每日一练(20230223)
- Python 刷Leetcode题库,顺带学英语单词(50)
- Python 刷Leetcode题库,顺带学英语单词(46)
- Python 刷Leetcode题库,顺带学英语单词(21)
- Python 刷Leetcode题库,顺带学英语单词(19)
- Python Django 一对多正向查询示例
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
- Python:python代码编程带你玩转双色球(了解双色球的概率逻辑)
- Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略
- Py之twilio:python库之twilio的简介、安装、使用方法之详细攻略
- 小白可以学 Python 吗?
- python基础算法-归并排序
- 【LeetCode Python实现】635. 设计日志存储系统(中等)
- Python编程:shelve模块-持久化python数据
- Python编程:pyenv管理多个python版本环境
- Python自动化部署工具-Fabric
- Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
- python反复执行某个命令
- 【Leetcode刷题Python】145. 二叉树的后序遍历
- 【Leetcode刷题Python】611. 有效三角形的个数
- 【Leetcode刷题Python】子数组查找
- 【Leetcode刷题Python】322. 零钱兑换
- 【Leetcode刷题Python】70. 爬楼梯
- 【Leetcode刷题Python】404. 左叶子之和
- 【Leetcode刷题Python】257. 二叉树的所有路径
- 【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
- 【Leetcode刷题Python】199. 二叉树的右视图
- 【Leetcode刷题Python】236. 二叉树的最近公共祖先
- 【Leetcode刷题Python】103. 二叉树的锯齿形层序遍历
- 【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
- 【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
- 【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
- 【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
- 【Leetcode刷题Python】剑指 Offer 11. 旋转数组的最小数字
- 【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
- 【Leetcode刷题Python】674. 最长连续递增序列