写点什么

每日一题:LeetCode-297. 二叉树的序列化与反序列化

作者:半亩房顶
  • 2024-01-18
    北京
  • 本文字数:1027 字

    阅读完需:约 3 分钟

每日一题:LeetCode-297. 二叉树的序列化与反序列化

刷题使我快乐,满脸开心.jpg


题目

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。


请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。


提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。


示例 1:



输入: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]
复制代码


提示:


  • 树中结点数在范围 [0, 104]

  • -1000 <= Node.val <= 1000

思路

没太难抓到这个题的点,定位困难可能是难在开放性?


没太懂,不过感觉用一个遍历方法序列化,用相同的方法反序列化即可,注意空节点处理就 OK

代码

type Codec struct {}
func Constructor() Codec {return Codec{}}
// Serializes a tree to a single string.func (this *Codec) serialize(root *TreeNode) string { str := "" // dfs 方式序列化,同样方式解析即可,最关键的应该就是空节点的处理 var dfs func(*TreeNode) dfs = func(root *TreeNode) { if root == nil { str += "n," return } str += strconv.Itoa(root.Val) + "," dfs(root.Left) dfs(root.Right) } dfs (root) return str}
// Deserializes your encoded data to tree.func (this *Codec) deserialize(data string) *TreeNode { nodes := strings.Split(data, ",") i := 0 // 同样 dfs 方式反序列化,注意空节点的处理 var dfs func() *TreeNode dfs = func() *TreeNode { if nodes[i] == "n" { i++ return nil } v, _ := strconv.Atoi(nodes[i]) i++ return &TreeNode{Val: v, Left: dfs(), Right: dfs()} } return dfs()}
复制代码




欢迎关注公众号交流更多题目~


发布于: 11 分钟前阅读数: 5
用户头像

半亩房顶

关注

人生那么长,能写多少bug? 2018-11-16 加入

我希望,自己永远是自己。我希望,远离bug。

评论

发布
暂无评论
每日一题:LeetCode-297. 二叉树的序列化与反序列化_面试_半亩房顶_InfoQ写作社区