二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
297. 二叉树的序列化与反序列化(剑指 Offer 37. 序列化二叉树)(剑指 Offer II 048. 序列化与反序列化二叉树)
class Codec:def serialize(self, root):"""Encodes a tree to a single string.:type root: TreeNode:rtype: str"""if not root:return ''return str(root.val) + ',' + str(self.serialize(root.left)) + ',' + str(self.serialize(root.right))def deserialize(self, data):"""Decodes your encoded data to tree.:type data: str:rtype: TreeNode"""if not data:return Nonedef dfs(dataList):node = dataList.pop(0)if node == '':returnroot = TreeNode(int(node))root.left = dfs(dataList)root.right = dfs(dataList)return rootdataList = data.split(',')return dfs(dataList)
序列化的思路就是前序遍历,将各个节点值之间通过 ‘,’ 连接起来;反序列化时,首先根据 ‘,’ 进行分隔,得到的列表就是各个节点的值(字符串),然后进行深度遍历dfs,对每个节点进行树节点构建,左右子树则是递归。
449. 序列化和反序列化二叉搜索树
由于二叉搜素树也是二叉树,所以可以使用上一题的题解。官方题解给出了优化,但是不太好理解,暂时不掌握。
428. 序列化和反序列化 N 叉树
class Codec:def serialize(self, root: 'Node') -> str:"""Encodes a tree to a single string.:type root: Node:rtype: str"""if not root:return ''data = ''data += str(root.val) + ',' + str(len(root.children))for child in root.children:data += ',' + self.serialize(child)return datadef deserialize(self, data: str) -> 'Node':"""Decodes your encoded data to tree.:type data: str:rtype: Node"""if not data:return Nonedef dfs(dataList) -> 'Node':node = dataList.pop(0)if node == '':returnroot = Node(int(node))root.children = []size = int(dataList.pop(0))for _ in range(size):root.children.append(dfs(dataList))return rootdataList = data.split(',')return dfs(dataList)
同样的思路,只不过序列化时的前序遍历要用 N 叉树的方法,而反序列化时的 dfs 也是要改为 N 叉树的写法,其余都一样。
二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)相关推荐
- 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)
236. 二叉树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'T ...
- 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)
二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...
- 两数、三数、四数之和相关题目(Leetcode题解-Python语言)
作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...
- 快速幂算法相关题目(Leetcode题解-Python语言)
50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...
- 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)
70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...
- 链表基础概念与经典题目(Leetcode题解-Python语言)
所谓链表,就是由链节点元素组成的表,那什么是链节点呢?直接上定义: class ListNode:def __init__(self, val=0, next=None):self.val = val ...
- 高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)
高度平衡的二叉搜索树(平衡二叉树),定义见此Leetbook.简单来说,就是基于相同节点值构建出来的二叉搜索树中高度最小的,即为平衡二叉树(不唯一).有 N 个节点的平衡二叉搜索树,它的高度是 log ...
- 二分查找基础概念与经典题目(Leetcode题解-Python语言)二分索引型
二分查找的定义如下(引自Wiki): 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algor ...
- 字符串经典题目(Leetcode题解-Python语言)
344. 反转字符串 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not ...
最新文章
- 一款性能调优利器 — 火焰图
- linux 卡在grub_安装Linux系统,Ubuntu时卡在这个界面不动了,有3个小时了。。显示:“正在运行update_grub”......
- Centos7 fstab盘符挂载硬盘导致重启系统失败解决办法
- linux修改文件句柄数生效_修改Linux的open files参数是,立即生效,无需重启
- 我在外包公司做增删改查有前途么?
- jQuery使用ajax传输xml文档在IE中无法正确解析的问题
- 水电图wp表示什么_装修水电工入门基础知识,刚入行不懂不用急?老师傅告诉你怎么做...
- (王道408考研数据结构)第七章查找-第二节2:二分查找及其判定树
- 万字长文!不为人所知的分布式锁实现全都在这里了
- 在dom最前面插入_虚拟 DOM 到底是什么?
- loadlibrary函数失败,错误码:126
- vb 分类汇总方法_高中数学19种解题方法+易错知识分类大汇总!
- 通过wvdial完成4G自动拨号上网
- Excel 解决高次方程求解的方法
- 华大单片机HC32L130J6TA入坑全纪录(一)
- 路由器web向导页面
- K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点
- vba 保存word里面的图片_如何将Word表格保存为图片?这3种方法你用过没?
- Aws S3 基础操作
- 随机森林c++_科研快报第91期:综合多特征使用随机森林和自相似性参数的极化SAR海面溢油检测...
热门文章
- [转]JS导出PDF
- C# dataGridView控件实用属性及事件总结
- MODIS NDVI数据处理相关问题
- 剑指offer之分行从上到下打印二叉树
- Android之状态栏通知Notification、NotificationManager详解
- matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
- asp 强制转换浮点数值_C/C++中浮点数的编码存储
- 一张纸能有多大力量?
- 专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...
- 一个女程序员征男友的需求说明书