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语言)相关推荐

  1. 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)

    236. 二叉树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'T ...

  2. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)

    二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...

  3. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

    作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...

  4. 快速幂算法相关题目(Leetcode题解-Python语言)

    50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...

  5. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)

    70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...

  6. 链表基础概念与经典题目(Leetcode题解-Python语言)

    所谓链表,就是由链节点元素组成的表,那什么是链节点呢?直接上定义: class ListNode:def __init__(self, val=0, next=None):self.val = val ...

  7. 高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)

    高度平衡的二叉搜索树(平衡二叉树),定义见此Leetbook.简单来说,就是基于相同节点值构建出来的二叉搜索树中高度最小的,即为平衡二叉树(不唯一).有 N 个节点的平衡二叉搜索树,它的高度是 log ...

  8. 二分查找基础概念与经典题目(Leetcode题解-Python语言)二分索引型

    二分查找的定义如下(引自Wiki): 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algor ...

  9. 字符串经典题目(Leetcode题解-Python语言)

    344. 反转字符串 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not ...

最新文章

  1. 一款性能调优利器 — 火焰图
  2. linux 卡在grub_安装Linux系统,Ubuntu时卡在这个界面不动了,有3个小时了。。显示:“正在运行update_grub”......
  3. Centos7 fstab盘符挂载硬盘导致重启系统失败解决办法
  4. linux修改文件句柄数生效_修改Linux的open files参数是,立即生效,无需重启
  5. 我在外包公司做增删改查有前途么?
  6. jQuery使用ajax传输xml文档在IE中无法正确解析的问题
  7. 水电图wp表示什么_装修水电工入门基础知识,刚入行不懂不用急?老师傅告诉你怎么做...
  8. (王道408考研数据结构)第七章查找-第二节2:二分查找及其判定树
  9. 万字长文!不为人所知的分布式锁实现全都在这里了
  10. 在dom最前面插入_虚拟 DOM 到底是什么?
  11. loadlibrary函数失败,错误码:126
  12. vb 分类汇总方法_高中数学19种解题方法+易错知识分类大汇总!
  13. 通过wvdial完成4G自动拨号上网
  14. Excel 解决高次方程求解的方法
  15. 华大单片机HC32L130J6TA入坑全纪录(一)
  16. 路由器web向导页面
  17. K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点
  18. vba 保存word里面的图片_如何将Word表格保存为图片?这3种方法你用过没?
  19. Aws S3 基础操作
  20. 随机森林c++_科研快报第91期:综合多特征使用随机森林和自相似性参数的极化SAR海面溢油检测...

热门文章

  1. [转]JS导出PDF
  2. C# dataGridView控件实用属性及事件总结
  3. MODIS NDVI数据处理相关问题
  4. 剑指offer之分行从上到下打印二叉树
  5. Android之状态栏通知Notification、NotificationManager详解
  6. matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
  7. asp 强制转换浮点数值_C/C++中浮点数的编码存储
  8. 一张纸能有多大力量?
  9. 专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...
  10. 一个女程序员征男友的需求说明书